我必须编写一个带有成员的新类,如下所示
class A
{
static int i;
const int j;
char * str;
...
...
};
现在我想为它编写赋值运算符。
A& A::operator=(const A& rhs)
{
if(this != rhs)
{
delete [] str;
str = new char[strlen(rhs.str)+1];
strcpy(str, rhs.str);
}
return * this;
}
对吗?我将忽略静态和常量成员(?
赋值运算符将一个对象复制到另一个对象中。由于相同类型的所有对象共享相同的静态成员,因此没有理由复制静态成员。
const
成员是另一回事。你不能(好吧,不应该)更改它们,但是如果两个对象对 const 成员具有不同的值,将一个对象复制到另一个对象可能不是一个好主意;常量成员将没有正确的值。这就是编译器不会为具有 const 成员的类生成复制赋值运算符的原因。因此,您首先必须确保复制这样的对象是有意义的,即使 const 成员的值是错误的;然后问问自己,如果 const 成员不影响它的行为方式,为什么它有 const 成员。
参考资料也。(是的,这里有回声)
静态成员不属于单个对象,因此不需要复制这些对象。
const
成员无法更改,因此您确实无法进行适当的复制。 参考资料。