我可以有一个类(“BIG”),它有另一个类作为成员(“Base”类型),以便在构造时,这个“Base”成员实际上将被设置为派生类?
特别是,我想拥有
class Base{
public:
void dostuff(){};
};
class DerivedA : public Base{
public:
void dostuff(){
//implementation version A
}
};
class DerivedB : public Base{
public:
void dostuff(){
//implementation version B
}
};
class BIG{
Base mything;
BIG(int Type){
if (Type==0)
mything=DerivedA();
if (Type==1)
mything=DerivedB();
}
};
C++ 不允许这样做吗?特别是,我会将神话从 Base 转换为 DerivedA 或 DerivedB。难道我纠正向下转换只从基地允许指针到派生的指针,只有当基本指针实际上已经是一个指向派生类?
首先,您可能忘记了实际从Base
. 但无论如何,多态需要一个指针或一个引用。否则,将派生类的对象分配给基类类型的变量将“切片”派生类对象,即它将从派生类对象中切出基类对象:
class Base{
public:
virtual void dostuff(){ cout << "in base" << endl; };
};
class DerivedA : public Base {
public:
virtual void dostuff(){ cout << "in derived" << endl; };
};
int main() {
Base mything = DerivedA(); // slicing, will result in a `Base`-object
mything.dostuff(); // Base class implementation
Base *polymorph = new DerivedA(); // polymorphic; will point to a DerivedA-instance
polymorph->dostuff(); // DerivedA class implementation of dostuff
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句