为什么不使用const,运算符重载会修改对象状态,例子
时间: 2024-03-25 20:40:12 浏览: 55
C++运算符重载 成员函数与友元函数详解
5星 · 资源好评率100%
假设有一个自定义的类 `MyClass`,其中有一个运算符重载函数 `operator+`,它的作用是对两个 `MyClass` 对象进行加法运算,并返回一个新的 `MyClass` 对象。如果 `operator+` 函数没有使用 const 修饰,那么它就有可能修改对象的状态。例如:
```cpp
class MyClass {
public:
MyClass(int value) : m_value(value) {}
MyClass operator+(const MyClass& other) {
MyClass result(m_value + other.m_value);
m_value += other.m_value; // 修改了当前对象的状态
return result;
}
int getValue() const { return m_value; }
private:
int m_value;
};
int main() {
MyClass a(1);
MyClass b(2);
MyClass c = a + b;
std::cout << "a.getValue() = " << a.getValue() << std::endl; // 输出 3
std::cout << "b.getValue() = " << b.getValue() << std::endl; // 输出 2
std::cout << "c.getValue() = " << c.getValue() << std::endl; // 输出 3
return 0;
}
```
在上面的例子中,`operator+` 函数返回了一个新的 `MyClass` 对象,但同时它也修改了当前对象的状态。因此,在执行完 `a + b` 的操作后,`a` 对象的值变成了 3,而不是原来的 1。这种情况下,程序的行为不可预测,因为用户可能会期望 `a` 对象的值不会被修改。
阅读全文