1

私は次のようなメンバーで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;
}

正しいですか?staticメンバーとconstメンバー(?)は無視します。

4

2 に答える 2

9

代入演算子は、あるオブジェクトを別のオブジェクトにコピーします。同じタイプのすべてのオブジェクトは同じ静的メンバーを共有するため、静的メンバーをコピーする理由はありません。

constメンバーは別の問題です。それらを変更することはできません(変更すべきではありません)が、2つのオブジェクトのconstメンバーの値が異なる場合は、あるオブジェクトを別のオブジェクトにコピーすることはお勧めできません。constメンバーには適切な値がありません。そのため、コンパイラはconstメンバーを持つクラスのコピー代入演算子を生成しません。したがって、最初に、constメンバーの値が間違っていても、そのようなオブジェクトをコピーすることが理にかなっていることを確認する必要があります。次に、constメンバーが動作に影響を与えないのに、なぜconstメンバーがあるのか​​を自問してください。

参照も。(はい、ここにエコーがあります)

于 2012-10-04T18:44:18.343 に答える
5

静的メンバーは単一のオブジェクトに属していないため、それらをコピーする必要はありません。

constメンバーは変更できないので、実際に適切なコピーを行うことはできません。参照も。

于 2012-10-04T18:40:53.893 に答える