如何避免多个类函数的实现

时间:2017-12-04 16:30:44

标签: c++ class polymorphism virtual aggregation

我是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中。这样我就可以避免这种复制粘贴实现的门();我喜欢这个主意!

有些人可以举例说明我如何实现这个目标吗? 我阅读了很多关于聚合的内容,但在我的案例中并不了解如何实现这一点。

2 个答案:

答案 0 :(得分:0)

我没有评论的声誉,所以我将其作为答案添加。

请看这个stackoverflow答案:How to call a parent class function from derived class function?

您希望创建一个实现您的界面并定义门的父类,但将其他两个函数保留为虚函数。然后继承该类并定义子类中的其余函数。然后,您可以从子类中调用父类中的门函数。

答案 1 :(得分:0)

InterfaceVehicle接口,因为它声明了所有方法但未实现,但为了实现您的目的,解决方案是构建** AbstractVehicle **即抽象类而不是界面 作为一个接口,抽象类不能被即时化,但它可以为一些常见的行为提供实现。 例如,如果MinicarBigCar需要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()