1 つの抽象クラス、派生クラス、および派生クラスを含むクラスの 3 つのクラスがあるとします。
class Parent {
public:
Parent();
void FunctionOne() { cout << "error"; }
void FunctionTwo() = 0;
}
class Child : public Parent {
public:
Child();
void FunctionOne() { cout << "implement function one" ;}
void FunctionTwo() { cout << "implement function two" ;}
}
class Execute{
public:
Execute(Parent& newparent) : parent(newparent) ;
Execute& operator=(const Execute& in) {
parent = in.parent;
Run() { parent.functionOne(); parent.functionTwo(); }
private:
Parent& parent;
}
オブジェクトを作成すると、すべてが正常に実行されます。
Excecute execute( Child );
execute.run();
出力: 「関数 1 を実装する」「関数 2 を実装する」
問題は、ベクトルに追加すると、親をコピーする実行がコピーされますが、子を親にコピーしてポリモーフィズムを使用する代わりに、親が抽象クラスをコピーし、出力が「エラー」になり、プログラムがクラッシュすることです.
vector<Execute> list;
list.push_back( Execute( Child ) );
list[0].run(); // ERROR
Childクラスがコピーされるように参照をコピーする方法はありますか? ポインターに切り替える必要がありますか? 問題は、Execute がコピーされているため、Child へのポインターの削除を管理する簡単な方法がないことです。このマシンでは Boost または shared_ptr<> を使用できません。
投稿に継承を追加しました。省略して申し訳ありません。Excecute execute( Child ); の問題を修正したと思います。申し訳ありませんが、理解できるように問題を単純化しようとしていたため、微妙なエラーが発生した可能性があります。私の元の問題を手伝ってもらえますか?