从泛型基类引用调用派生类方法

时间:2013-10-10 16:40:29

标签: c++ oop polymorphism

我有一个基类

class base {
  public:
    base();
    int someData;
    virtual void foo(){
      std::cout << someData;
    }
};

和一些派生类,如

class derived : public base {
  public:
    derived();
    void foo(){
     std::cout << someData * 5;
  }
};

基本上他们拥有相同类型的数据,但对这些数据的操作却不同。 我有另一个类,不需要知道我的对象的细节,它需要做的就是设置数据并调用派生的foo()。

class useData {
  public:
    useData();

    base x;
    int do() { x.someData = 5; return x.foo(); }
};

我希望“useData”尽可能通用,因此我在其定义中使用基类而不是派生类。 当然,在这种情况下,它将调用基本方法而不是派生方法。如何重写我的代码或自动进行(没有类型检查或类似)调用派生方法?

谢谢

1 个答案:

答案 0 :(得分:1)

要使用多态,您需要一些指针或引用。因此,在useData中,变量x应声明为base *。之后,您可以使用new创建任何派生类。多态性将按预期执行..