zoukankan      html  css  js  c++  java
  • 为什么operator<<运算符重载一定要为友元函数

    一、

    如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。。。。。

    而 >>  或<< 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。。。。。。。就只能申明为友元函数了。。。

    如果一定要声明为成员函数,只能成为如下的形式:

    ostream & operator<<(ostream &output)

    {

      return output;

    }

    所以在运用这个<<运算符时就变为这种形式了:data<<cout;

    不合符人的习惯。

     

    二、

    cout << f1 << f2;

    //用重载运算符表示,只能通过友员来实现,如果要用成员函数,则会有cout.operator<<(const F& f),所以这是不可能的.因此只能用友员来实现,operator<<(cout,f) 而cout是ostream型的,因此有以下标准格式.注意不能加const,因为cout是要改变的,会改变里的缓冲成员.

    friend ostream& operator<<( ostream& cout, constF&) //输出运算符的标准重载格式.

    friend istream& operator>>(istream& is, F& f){ } //输入运算符重载标准格式

     class T;
    T t;
    成员的话,得这么用了
    t<<cout;
    而不是
    cout<<t
    而且也无法链式使用了
    cout<<t<<t<<t<<endl;
  • 相关阅读:
    Git fetch和git pull的区别
    git revert和git reset的区别
    JSF 与 HTML 标签的联系
    3. Decorator
    2. Observer
    1. Strategy
    继承构造函数的执行顺序
    模板特化
    8.1.2 Template instantiation (Accelerated C++)
    std::cin
  • 原文地址:https://www.cnblogs.com/CreatorKou/p/8888168.html
Copyright © 2011-2022 走看看