【发布时间】:2011-05-29 10:13:51
【问题描述】:
我做了以下运算符重载测试:
#include <iostream>
#include <string>
using namespace std;
class TestClass
{
string ClassName;
public:
TestClass(string Name)
{
ClassName = Name;
cout << ClassName << " constructed." << endl;
}
~TestClass()
{
cout << ClassName << " destructed." << endl;
}
void operator=(TestClass Other)
{
cout << ClassName << " in operator=" << endl;
cout << "The address of the other class is " << &Other << "." << endl;
}
};
int main()
{
TestClass FirstInstance("FirstInstance");
TestClass SecondInstance("SecondInstance");
FirstInstance = SecondInstance;
SecondInstance = FirstInstance;
return 0;
}
赋值运算符的行为与预期一样,输出另一个实例的地址。
现在,我将如何真正分配来自另一个实例的东西?例如,像这样:
void operator=(TestClass Other)
{
ClassName = Other.ClassName;
}
【问题讨论】:
-
你也不需要,但是你有一个赋值运算符和一个析构函数,但没有复制构造函数,这看起来仍然很奇怪。根据三法则,如果您需要其中任何一个,您可能需要全部三个。
-
@sbi 当然。不过,这只是一些测试代码。
-
不过,当我看到这一点时,反应就会开始。我还注意到,您为每个副本传递了一个
std::string对象,而不是const引用。您可能想阅读this。
标签: c++ class operators operator-overloading assignment-operator