基类数据成员类型取决于派生类

时间:2019-05-25 10:02:13

标签: c++

我对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。

1 个答案:

答案 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 方式(如“在运行时编译”),但它们不是正确的