c++类中函数和运算符重载小细节

今天做c++题目碰到的问题

如何用类中同一个成员函数 既可以输出一个值 又可以作为可修改的左值:

在这里插入图片描述
在这里插入图片描述

此时24行是错误的,错误显示为a.getValue()不是可修改的左值

想了许久,
发现可以这样子改:
在这里插入图片描述
那么为什么可以这么改呢?

因为此时A中第9行中已经把<<运算符重载为 输出A的成员num,此时a.getValue()返回一个A的对象引用,则第main23行中可以成功输出。

要注意的是第11行中成员函数A& getValue()返回的是A的引用,如果是A getValue()则返回的只是A类型,则此时main中的a.getValue()会调用复制构造函数创造一个与a完全一样的对象a‘,然后将k赋值给a’的成员a’.num,a.num不变。

代码如下,还不太懂可以拿去自己的编译器上尝试、理解:


class A {
public:
 int num;
 A(int t) { num = t; }
 A(const A& p) { num = p.num; }
 friend ostream& operator <<(ostream& out,const A p) { out << p.num; return out; }
 int getValue() { return this->num; }
 A& getValue(){ return this->num; }
 };
 
 int main()
  {
    int m=3, k=10;
      A a(m);
       cout << a.getValue() << endl;
          a.getValue() = k;
          cout<<a<<endl;
            return 0;
   }

猜你喜欢

转载自blog.csdn.net/mazamu/article/details/106266173
今日推荐