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

技术
©2019-2020 Toolsou All rights reserved,
(精华)2020年8月9日 C#基础知识点 反射shiro-oauth 启用第三方认证登录Result返回结果信息的封装(精华)2020年6月26日 C#类库 循环执行帮助类SpringDataJPA的Repository理解python原语--锁LockPHP打印输出logLinux 文件名合法性检测org.postgresql.util.PSQLException 处理记录明明是post请求为什么会在地址栏显示参数?