这是一个设计问题。
我有一个共同的基类,它定义了一堆虚函数,以及每个函数的默认行为(如果派生类没有定义它)。
例如:
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);
我总是得到基类实现。我不想要的!
但是,显然我希望用户只关心“运输”,而不是如果运输是自行车或汽车有不同的方法和对象类型。因为基类已经定义了所有方法,而派生的方法只重新定义了其中的一些方法。
有一种简单的方法可以实现这一目标吗?也许重新设计?
谢谢!