c ++多个子类 - 继承

时间:2016-08-12 16:13:43

标签: c++ inheritance polymorphism

我有以下c ++类继承结构。

Car -> personal -> 2 seats
                -> 5 seats -> Peugot307
    -> lory  

基类Car有保护变量 高度,宽度和一些方法,例如set_values(),这是纯虚函数。

让我们说一下:

class Car 
{
    protected: 
        int width, height;
    public:
        virtual bool set_values(int &, int &) = 0 ; 


};

class Personal : public Car 
{
    public: 
        virtual bool set_values(const int & h, const int & w) override
        {
            this->height = h;
            this->width = w; 
        }


};

class seats2 : public Personal 
{

// some class spec things

};


void main()
{
    seats2 car1; 
    car1.set_values(2, 10); 
}

编译时,我总是得到错误,2seats类没有变量权重和高度。 如何克服这样的问题?

1 个答案:

答案 0 :(得分:1)

请注意,您描述的继承结构不是多重继承。多重继承是指单个类从多个父级继承,而不是在一个类有多个子级时。

在Personal类重写的方法中,根本无法访问5席位类的成员。请记住,这个重写的方法需要适用于该类的所有实例,其中一些可能甚至没有由5个席位类定义的成员(例如,3个席位类的实例)。

如果你想对查看5个席位成员的check_validity方法做一些特别的事情,我认为最有意义的是在5个席位的课程中再次覆盖这个方法。您仍然可以链接到父方法以重用Personal类中的代码。例如:

class FiveSeats : public Personal {
private:
        int extra_data;
public:
        virtual bool check_validity();
};

bool FiveSeats::check_validity()
{
        // First chain up to the parent method
        if (!Personal::check_validity())
                return false;

        // Check something that is specific to the FiveSeats class
        if (extra_data != 42)
                return false;

        return true;
};