是否有一些解决方案或我必须保持完全类型?
//头文件
Class Car {
public:
Car();
virtual ~Car();
};
class Bmw:Car {
public:
Bmw();
virtual ~Bmw();
};
void Start(Car& mycar) {};
// cpp file
Car::Car(){}
Car::~Car() {}
Bmw::Bmw()
:Car::Car(){}
Bmw::~Bmw() {}
int main() {
Car myCar;
Bmw myBmw;
Start(myCar); //works
Start(myBmw); //!! doesnt work
return 0;
}
答案 0 :(得分:14)
C ++默认为私有继承,因此,您需要将Bmw声明为:
class Bmw:public Car
另外,为了完全准确,您应该将Start
作为Car
的虚方法,并在后代类中根据需要覆盖它。 :)
答案 1 :(得分:8)
你应该写class Bmw : public Car
。
你想要的是公共继承,但不是私有(这是C++
中类的默认值。)
答案 2 :(得分:5)
您Bmw
私下继承了Car
,这会阻止将Bmw
引用转换为Car
引用。将定义更改为:
class Bmw : public Car
答案 3 :(得分:4)
您需要公共继承 - 它表示派生类型和基本类型之间的 IS A 关系。与 bmw IS A car 一样,而私有继承(未明确指定时的默认值以及此处有的内容)代表以关系实现
尝试:
class Bmw: public Car
{
// ...
];
答案 4 :(得分:3)
我不是机械师,但是class Bmw: public Car
应该帮你解决问题,让你立即理解继承!
private
es class
对public
s的继承为struct
。