1

次の許容可能なプログラミング手法は次のとおりです。

class TestA
{
    protected:
        int A;

    public:
        TestA(){A = 10;}
        TestA &operator=(const TestA &ItemCopy)
        {
            A = ItemCopy.A;
            printf("A is: %d!\n",A);
            return *this;
        }
};

class TestB : public TestA
{
    protected:
        int B;

    public:
        TestB(){A = 20; B = 30;}
        operator const TestA&(){ return *this; } //Note returns reference, upcasts implicitly.
};

int main()
{
    TestA Test;
    TestB Test2;

    Test = Test2; //Calls Test2's (AKA TestB's) conversion operator
    return 0;
}

許容できる/許容できない理由は何ですか?

(TestAでTestB代入演算子を作成することについて、明白な提案をしないでください。これは、アップキャストおよび/または変換演算子をこの方法で使用する必要があるかどうかに関する質問です)。

また、質問の賛成/反対のコメントにフィードバックを残して、将来質問を改善できるようにすることをお勧めします。

4

2 に答える 2

2

ここでは変換演算子は必要ありません。aはconst TestA&派生クラスのインスタンスに完全にバインドできます(継承はパブリックであるため)。

于 2011-10-05T14:14:23.243 に答える
1

あなたが書いた演算子は実際にはまったく必要ありません。パブリック継承を使用すると、言語が自動的にそれを行います。演算子を完全に削除しても、同じように機能します。そして、アップキャストは通常​​は問題ありません。これは、派生インスタンスに親ポインター/参照を割り当てることによって継承を使用する方法です。

于 2011-10-05T14:17:57.103 に答える