1

我必须与成员一起编写一个新课程,例如

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;
}

这样对吗?我将忽略静态和常量成员(?)。

4

2 回答 2

9

赋值运算符将一个对象复制到另一个对象中。由于相同类型的所有对象共享相同的静态成员,因此没有理由复制静态成员。

const成员是另一回事。您不能(嗯,不应该)更改它们,但是如果两个对象的 const 成员具有不同的值,则将一个对象复制到另一个对象可能不是一个好主意;const 成员不会有正确的值。这就是为什么编译器不会为具有 const 成员的类生成复制赋值运算符。因此,您首先必须确保复制这样的对象是有意义的,即使 const 成员的值错误;然后问自己为什么它有 const 成员,如果它们不影响它的行为。

参考也。(是的,这里有回声)

于 2012-10-04T18:44:18.343 回答
5

静态成员不属于单个对象,因此您不需要复制它们。

const成员不能改变,所以你真的不能做一个正确的副本。参考也。

于 2012-10-04T18:40:53.893 回答