我必须写一个类似
的新类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;
}
是不是?我将忽略static和const成员(?)。
答案 0 :(得分:9)
赋值运算符将一个对象复制到另一个对象中。由于所有相同类型的对象共享相同的静态成员,因此没有理由复制静态成员。
const
成员是另一回事。你不能(好吧,不应该)改变它们,但如果两个对象对const成员有不同的值,那么将一个对象复制到另一个对象可能不是一个好主意。 const成员将没有正确的值。这就是为什么编译器不为具有const成员的类生成复制赋值运算符的原因。因此,首先必须确保复制这样的对象是有意义的,即使const成员的值不正确;然后问问自己为什么它有const成员,如果它们不影响它的行为。
也参考。 (是的,这里有回音)
答案 1 :(得分:5)
静态成员不属于单个对象,因此您无需复制这些成员。
const
成员无法更改,因此您无法正确复制。参考文献。