我有以下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类没有变量权重和高度。 如何克服这样的问题?
答案 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;
};