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



我有一个关于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。

这是唯一的(*(正确的咒语。

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();

(*(还有其他有效(如"它在运行时编译"(的方式,但它们不是 right

最新更新