C++输入输出运算符重载

来源:互联网 发布:网络商业通 编辑:程序博客网 时间:2024/05/22 12:28

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 << 对象名.成员变量 << 对象名.成员变量<< ......;}


    friend istream&/*使用引用是为了连续使用*/operator>>(istream& is,类名& 对象名)

    { return is >> 对象名.成员变量 >> 对象名.成员变量 >> .....;}


  注意:不要忘记加friend,因为cout << s << endl; //编译器解析为cout.operator<<(s);或者//operator(cout,s);然而对于第一种方式,我们没有办法把这种函数类型再写入以提供好了的cout 类下;所以只能使用第二种方式,该方式不是类的成员函数,所以要声明为友元也就是说写在类里面的函数不一定就是成员函数;


    2.友元类 和 友元函数
    使用关键字friend 修饰的函数和类
    (1)友元不是成员,只是为了声明他可以访问我的私有部分而已,被声明为友元的函数可以访问类中的任何成员
    (2)友元声明可以出现在类的公有、保护、私有任何一个部分,效果是一样的,一般放在类的开始位置或者结束位置

   
0 0
原创粉丝点击