我对c ++中的多态性有疑问:
头文件
class Base {
public:
type1 data;
};
class Derived1 : public Base {
public:
type2 data;
};
class Derived2 : public Base {
public:
type3 data;
};
代码:
Base * obj;
if (...)
obj = new Derived1();
else
obj = new Dervied2();
// Do something on declared object
DoSomething( obj->data );
如果类型取决于所定义的派生类,我应该在基类中将type1作为什么? DoSomething()函数将被重载以接收type2或type3。
答案 0 :(得分:0)
这是唯一的(*)正确咒语。
class Base {
public:
virtual void DoSomething() = 0;
// no data
};
class Derived1 : public Base {
public:
void DoSomething() override;
private:
type2 data;
};
class Derived2 : public Base {
public:
void DoSomething() override;
private:
type3 data;
};
Base * obj;
if (...)
obj = new Derived1();
else
obj = new Derived2();
obj->DoSomething();
(*)还有其他 valid 方式(如“在运行时编译”),但它们不是正确的。