2016-12-06 17 views
-2

から派生クラスのコンストラクタを呼び出す(コンストラクタ、デストラクタ、バーチャルなどと異なるコードを使用する)、A :: createChildを実装してBまたはCのいずれかのポインタを追加する方法基本クラス

#include <vector> 
#include <cassert> 

class A { 
    void createChild(std::vector<A *>); 
}; 

void A::createChild(std::vector<A *>) { 
    //What code goes here? 
} 

class B : A {}; 

class C : A {}; 

int main() { 
    std::vector<A *> ptrs; 
    ptrs.push_back(new B); 
    ptrs.push_back(new C); 
    ptrs[0]->createChild(ptrs); //Should add a new class of B to ptrs 
    ptrs[1]->createChild(ptrs); //Should add a new class of C to ptrs 
    assert(typeid(ptrs[2])==typeid(ptrs[0]); 
    assert(typeid(ptrs[3])==typeid(ptrs[1]); 
} 
+0

'A'と 'B'または 'C'との関係は何ですか? –

+0

修正されました。 BとCは、あなたが正しいと答えた – user3117152

+0

@ NathanOliverの子です。私はそれを誤解していた。 – Joshhw

答えて

3

あなたはそれを達成するために、テンプレート機能を使用することもできます。

class A { 
    template<typename Derived> 
    void createChild(std::vector<A *>); 
}; 

template<typename Derived> 
void A::createChild(std::vector<A *> v) { 
    v.push_back(new Derived); 
} 
関連する問題