0

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 ); の問題を修正したと思います。申し訳ありませんが、理解できるように問題を単純化しようとしていたため、微妙なエラーが発生した可能性があります。私の元の問題を手伝ってもらえますか?

4

2 に答える 2