0

わかりましたので、状況を設定しました:

ClassA() 
{
     method();
}
ClassB: public ClassA()
{
     overrides method();
}

私は別のクラスでこの状況を抱えています:

list<ClassA> members;
addMethod(ClassA newMember)
{
     members.push_back(newMember);
}

update()
{
   for(std::list<ClassA>::iterator list_iter = members.begin(); list_iter != members.end(); list_iter++)
   {
       ClassA tklb = *list_iter;
       tklb.method();
   }

    return 0;
 }

問題は、私が tklb.method() を実行しているとき、子クラスから on を呼び出したいのですが、それは list であるため、常に親クラスから呼び出します。classA の子であり、「メソッド」を別の方法で行う他のクラスがあるため、これが必要です。

4

1 に答える 1

1

アイテムがポリモーフィックに動作するには、アイテムへのポインターを使用する必要があります。オブジェクトがコピーコンストラクターを介してリストに配置される可能性があるため、現時点ではオブジェクトスライスの危険にさらされています。

説明したとおりに動作するメソッド (ポリモーフィズム) に加えて、メソッドを として宣言する必要がありますvirtual。(戻り値の型がないのはタイプミスだと思いますか?)。

std::list<ClassA*>(または適切なスマート ポインター)に変更します。

于 2013-06-21T12:43:10.067 に答える