您的位置:首页 > 编程语言 > C语言/C++

多态和友元

2016-05-17 20:37 344 查看
为啥把友元和多态放在一起,因为多态里的重载正好用到友元了。

友元:

第一部分:函数的友元

#include <iostream>
using namespace std;

class A
{
public:
A()
{
a=1;
}
friend A show(A &x)      //要注意的点在于friend不是用来定义函数类型的,依旧得写void。<span style="white-space:pre">	</span>其次要注意加上&这个符号。
{
cout<<x.a<<endl;
}
private:
int a;

};

int main()
{
A a;
show(a);<span style="white-space:pre">			</span>//友元可以直接当作函数调用,但是括号里面要写类。
}


第二部分:类的友元(个人感觉作用不大,因为用继承就行了,这个很麻烦,逻辑我说不明白。)

#include <iostream>
using namespace std;

class A
{
public:
A()
{
a=1;
}
friend class B;
private:
int a;
};

class B
{
public:
void show(A &x)
{
cout<<x.a<<endl;
}
};

int main()
{
A a;
B b;
b.show(a);

}


多态:

第一部分:重载

1.类的加减乘除(有两种方法,一个是operator前用类,一个是用friend)

////////////////////////////// 类

#include <iostream>
using namespace std;

class A
{
public:
A(int x)
{
a=x;
}

A operator+(A x)                //加法就是这么写的,括号里只有一个(这里代表b)。
{
return A(a+x.a);
}

void show()
{
cout<<a<<endl;
}
private:
int a;
};

int main()
{
A a(10),b(20);

a=a+b;
a.show();

return 0;
}


/////////////////////////////////// 友元

#include <iostream>
using namespace std;

class A
{
public:
A(int x)
{
a=x;
}

friend A operator+(A x,A y)                //加法就是这么写的(书上在x和y前加&但是我看不懂啥意思,去掉并不影响),注意括号里变成了两个,前面加了friend。
{
return A(x.a+y.a);
}

void show()
{
cout<<a<<endl;
}
private:
int a;
};

int main()
{
A a(10),b(20);

a=a+b;
a.show();

return 0;
}


2.除了重载的加减乘除,经常用的重载

//////////////////////////////////// ""   ->   ""

定义一个类直接调用它的函数就可以,干嘛弄这个,有毛病。

///////////////////////////////////""    []    ""     这个是下标(注意[]这个符号是用来访问的,不是新建的)。

#include<iostream>
#include<string.h>
using namespace std;

class A
{
public:
A(char* x)
{
num=strlen(x);
t=new char[num+1];
strcpy(t,x);
}
char operator[](int x)
{
return t[x];
}
private:
int num;
char *t;
};

int main()
{
A z("abcdefg");
cout<<z[2]<<endl;

return 0;
}


第二部分:虚函数

看书上看了半天,本以为是高大上,结果竟然是继承的重写(进我博客的继承里看),哎呦,这群编书的。

第三部分:抽象函数

不会,用到再说。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多态 c++