抽象基本クラスA*
へのポインタがあれば、それを(基本クラスとして)コピーまたは代入し、派生コピーコンストラクタまたは代入演算子を呼び出す必要があります。私はコピーコンストラクタが仮想ではないことを理解しているので、おそらくコピーコンストラクタはこれを行うためのオプションではありませんが、代入演算子はそうです。それでも動作していないようです:次のコードは、bの割り当てに失敗した派生した代入演算子を基本クラスから呼び出す方法は?
assigned a
x!
destroyed b
destroyed b
を出力します。
#include <iostream>
using namespace std;
class A
{
public:
virtual void x()=0;
virtual ~A() {}
virtual A& operator=(const A& other) { cout << "assigned a" << endl; return *this;}
};
class B : public A
{
public:
virtual B& operator=(const B& other) { cout << "assigned b" << endl; return *this;}
virtual void x() { cout << "x!" << endl; }
virtual ~B() { cout << "destroyed b" << endl; }
};
int main()
{
A* a = new B();
A* aa = new B();
*aa=*a;
aa->x();
delete a;
delete aa;
return 0;
}
どのようにするには?
EDITこの質問は正しく以下に回答されましたが、間違った質問でした。代入演算子をオーバーライドしようとするべきではありません。なぜなら、Aのサブクラスにを割り当てようとしないからです。です。単純な答えのために(たぶん)C++ elegantly clone derived class by calling base class
大したことではありませんが、疑問は**仮想基本クラス**について質問し、コードにはありません。 –
私はあなたが「抽象的な」基本クラスではなく、「仮想」ではないと思います(これはまったく別物です)。基本クラスの抽象度は、あなたの問題とは無関係です。 – molbdnilo
です。編集を参照してください。 –