存在静态常量成员时的赋值运算符



我必须编写一个带有成员的新类,如下所示

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成员无法更改,因此您确实无法进行适当的复制。 参考资料。

相关内容

最新更新