ベースベクトル内にあるときに子オブジェクトのメンバーにアクセスする[重複]
現在、子オブジェクトのメンバーがベースベクトルにあるときにアクセスする際に問題が発生しています。これはオブジェクトのスライスの問題であり、動的キャストを使用しようとしていますが、初心者であり、構文や使用方法がよくわかりません。それ、どんな助けでも擬似コードをいただければ幸いです:
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
最初の手法は、仮想関数に依存することです。
class Base
{
public:
virtual int doStuff();
}
Class Derived : public base
{
public:
virtual int doStuff();
}
次に、items[0]->doStuff()
派生バージョンを呼び出します。
2番目のテクニックはダウンキャストすることです:
dynamic_cast<Derived*>(items[0]);
これにより、nullptr
または派生オブジェクトポインタが提供されます。問題は、これを機能させるには仮想関数を追加する必要があるということです。