我是C ++的新手,因此需要一些帮助。 这是代码:
class InterfaceVehicle
{
virtual int door() = 0;
virtual int seats() = 0;
virtual int enginepower() = 0;
}
class minicar: public InterfaceVehicle
{
int door () {return 4;}
int seats () {return 2;}
int enginepower () {return 10;}
}
class bigcar: public InterfaceVehicle
{
int door () {return 4;}
int seats () {return 5;}
int engine () {return 20;}
}
class truck: public InterfaceVehicle
{
int door () {return 2;}
int seats () {return 1;}
int engine () {return 50;}
}
我有一个名为Vehicle的接口基类和三个实现接口类所有功能的不同类。这里我想避免门功能的相同实现。 我得到了一些建议来建立一个实现这个门功能的新类,这个类将被聚合到bigcar和minicar中。这样我就可以避免这种复制粘贴实现的门();我喜欢这个主意!
有些人可以举例说明我如何实现这个目标吗? 我阅读了很多关于聚合的内容,但在我的案例中并不了解如何实现这一点。
答案 0 :(得分:0)
我没有评论的声誉,所以我将其作为答案添加。
请看这个stackoverflow答案:How to call a parent class function from derived class function?
您希望创建一个实现您的界面并定义门的父类,但将其他两个函数保留为虚函数。然后继承该类并定义子类中的其余函数。然后,您可以从子类中调用父类中的门函数。
答案 1 :(得分:0)
InterfaceVehicle
是接口,因为它声明了所有方法但未实现,但为了实现您的目的,解决方案是构建** AbstractVehicle **即抽象类而不是界面
作为一个接口,抽象类不能被即时化,但它可以为一些常见的行为提供实现。
例如,如果Minicar
和BigCar
需要door()
的相同实现,而Truck
需要另一个,则可以将基类中的常见行为指定为
class AbstractVehicle{
virtual int door() { return 4;} ;
virtual int seats() = 0;
virtual int enginepower() = 0;
}
class Minicar: public virtual AbstractVehicle
{
int seats () {return 2;}
int enginepower () {return 10;}
}
class Bigcar: public virtual AbstractVehicle
{
int seats () {return 5;}
int engine () {return 20;}
}
class Truck: public virtual AbstractVehicle
{
int door () {return 2;}
int seats () {return 1;}
int engine () {return 50;}
}
通过这种方式,子类不必遵守方法door()
的合同,他们可以来支持它(在卡车的情况下需要另一个实现),但它们是没有强制执行,因为他们必须为纯抽象方法执行此操作,例如seats()
和enginepower()
。