调用基类虚方法,而不是派生方法

时间:2015-06-03 10:28:14

标签: c++ virtual derived-class

这是一个设计问题。

我有一个共同的基类,它定义了一堆虚函数,以及每个函数的默认行为(如果派生类没有定义它)。

例如:

class Transport {
public:
    Transport(){}
    Transport(const Definition & def);

    //Access functions that have to be redefined
    virtual void getFuelUsage(float& r) { r=0; }
    virtual void getMaxSpeed(float& r){ r=0; }
    virtual void getNumPeople(float& r){ r=0; }
    virtual void getWeight(float& r); { r=0; }
    //... Many more
};

然后我有一些派生类:

class Car {
public:
    Car(){}
    Car(const Definition & def);

    //Access functions that have to be redefined
    virtual void getFuelUsage(float& r) { .... } //Redefined
    virtual void getMaxSpeed(float& r){ .... } //Redefined
    virtual void getNumPeople(float& r){ .... } //Redefined
    //...
};

class Bike {
public:
    Bike(){}
    Bike(const Definition & def);

    //Access functions that have to be redefined
       //I want default to be kept
    virtual void getMaxSpeed(float& r){ .... } //Redefined
    virtual void getNumPeople(float& r){ .... } //Redefined
    //...
};

但是当我以这种方式使用它时:

Transport a = Bike(definition);
float speed;
a.getMaxSpeed(speed);

我总是得到基类实现。我不想要的!

但是,显然我希望用户只关心“运输”,而不是如果运输是自行车或汽车有不同的方法和对象类型。因为基类已经定义了所有方法,而派生的方法只重新定义了其中的一些方法。

有一种简单的方法可以实现这一目标吗?也许重新设计?

谢谢!

0 个答案:

没有答案