ベースベクトル内にあるときに子オブジェクトのメンバーにアクセスする[重複]

Jan 20 2021

現在、子オブジェクトのメンバーがベースベクトルにあるときにアクセスする際に問題が発生しています。これはオブジェクトのスライスの問題であり、動的キャストを使用しようとしていますが、初心者であり、構文や使用方法がよくわかりません。それ、どんな助けでも擬似コードをいただければ幸いです:

class Base {}

Class Derived : public base {

bool A

}

std::vector<Base*> items;

Item* i = new Derived(constructor);

items.push_back(i);

// items[0]->A isnt accessible due to object slicing

回答

Jeffrey Jan 20 2021 at 07:47

最初の手法は、仮想関数に依存することです。

class Base 
{
    public:
    virtual int doStuff();
}

Class Derived : public base 
{
    public:
    virtual int doStuff();
}

次に、items[0]->doStuff()派生バージョンを呼び出します。

2番目のテクニックはダウンキャストすることです:

dynamic_cast<Derived*>(items[0]);

これにより、nullptrまたは派生オブジェクトポインタが提供されます。問題は、これを機能させるには仮想関数を追加する必要があるということです。