今天做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;
}