我有兩個類B和C(無論從類A衍生)的一類稱爲爲h,它持有A或B.根據構造函數中的參數創建內部對象?
代碼:
class A // abstract base class
{
// bells and whistles
// virtual fn
void fn() = 0 ;
protected:
// some variables common to B and C
};
class B : public A // inherit from A...
{
B();
fn(); // implement virtual function
// bells and whistles
};
B::B() :A()
{
// things
}
void B::fn()
{
// things
}
// Class C : exactly the same as class B
// Class H : holds B or C
enum class CLASS_TYPE { TYPE_B, TYPE_C }
class H
{
public:
H(CLASS_TYPE type_);
~H();
private:
A * _obj;
};
H::H(CLASS_TYPE type_)
{
switch(type_)
{
case CLASS_TYPE::B:
_obj = new B();
break;
case CLASS_TYPE::C:
_obj = new C();
break;
}
}
H::~H()
{
delete _obj;// delete allocated object
}
這是創建內部以正確的方式一個類中的對象基於構造函數中的參數? 也正在使用抽象基類,虛擬高效?這是一個大型模擬程序的一部分,我想避免性能處罰。
謝謝。 PS:我試圖保持簡單,如果有更多的信息需要告訴。