1.函数重载定义:
函数重载: 在同一个作用域中,函数名相同,函数的参数列表不同
对于基本类型如:
int i = 10;
cout << i << endl; //编译器解析: cout.operator<<(i);类比上面:
char c = 'a';
cout << c << endl; //编译器解析: cout.operator<<(c);
类比上面:
class Student {};Student s;
cout << s << endl;//error 没有这个函数 cout.operator<<(s);//编译器解析为cout.operator<<(s);//operator(cout,s);
/usr/include/c++/4.6/ostream 文件中 提供好了各种版本的operator<< 函数格式:
friend ostream&/*使用引用是为了连续使用*/ operator<<(ostream& os,const /*加const防止修改*/类名& 对象名)
{ return os << 对象名.成员变量 << 对象名.成员变量<< ......;}
{ return is >> 对象名.成员变量 >> 对象名.成员变量 >> .....;}
注意:不要忘记加friend,因为cout << s << endl; //编译器解析为cout.operator<<(s);或者 //operator(cout,s);然而对于第一种方式,我们没有办法把这种函数类型再写入以提供好了的cout 类下;所以只能使用第二种方式,该方式不是类的成员函数,所以要声明为友元;也就是说写在类里面的函数不一定就是成员函数;
2.友元类 和 友元函数
使用关键字friend 修饰的函数和类
(1)友元不是成员,只是为了声明他可以访问我的私有部分而已,被声明为友元的函数可以访问类中的任何成员
(2)友元声明可以出现在类的公有、保护、私有任何一个部分,效果是一样的,一般放在类的开始位置或者结束位置