pas*_*uce 4 c++ operator-overloading
我正在编写一本关于运算符重载的示例教科书,它让我想知道返回"常量值"(例如operator+).据我了解,如果我作为a返回任何内容const,则以后无法修改.说我有这个粗略的例子:
#include <iostream>
using namespace std;
class Temp {
private:
int val;
public:
Temp(){};
Temp(int v):val(v){};
const Temp operator+(const Temp& rhs) const {
return Temp(this->val + rhs.val);
}
int getVal() { return this->val; }
void setVal(int v) { this->val = v; }
};
int main() {
Temp t1, t2, t3;
t1 = Temp(4);
t2 = Temp(5);
t3 = t1 + t2;
cout << t3.getVal() << endl;
t3.setVal(100);
cout << t3.getVal() << endl;
}
Run Code Online (Sandbox Code Playgroud)
之后t3 = t1 + t2,t3现在是一个const Temp对象,而不是一个const Temp&; 然而,它是一个const.我输出它val,然后修改它,虽然我认为我不应该这样做?或者这只属于const Temp&?
你说:
t3现在是一个const Temp对象
任务结束后,这就是你的误解所在.
一旦你声明了一个对象,它就永远不会改变类型.
你写Temp t1, t2, t3;那么t3现在是永远是一个非const Temp对象.您将一个const Temp对象(通过引用)传递给它的赋值运算符,运算符用来修改它t3.
为了更好地了解这一点,请查看赋值运算符示例.
编辑:从你似乎认为的一些评论
t3Temp通过使用其构造函数分配了一个新对象?
这让我想到这里也可能存在对构造函数的误解.需要注意的是不论哪种类型的每个对象,一个构造函数被调用该对象只出现一次.这是在第一次声明时发生的.对你而言,当你声明它时,你正在调用它t3的默认构造函数Temp t1, t2, t3;.
此外,从运算符返回const值通常不是一个好主意.有关详细信息,请参阅user4581301的链接:按const值返回的目的是什么?
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |