不承认C++继承
问题描述:
有没有一些解决方案,或者我必须保持准确的类类型?不承认C++继承
//头文件
Class Car {
public:
Car();
virtual ~Car();
};
class Bmw:Car {
public:
Bmw();
virtual ~Bmw();
};
void Start(Car& mycar) {};
// CPP文件
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;
}
答
C++默认为私有继承,因此,你需要声明宝马为:
class Bmw:public Car
而且,是完全正确的,你要真有Start
为虚方法的Car
并根据需要在后代类中覆盖它。 :)
答
你应该写class Bmw : public Car
。
你想在这里得到的是公有继承,但不是私有继承(这是C++
中类的默认值)。
答
您有Bmw
私自从Car
继承,它可以防止将Bmw
引用转换为Car
引用。定义更改为:
class Bmw : public Car
答
您需要公有继承 - 它代表IS A派生类型和基类型之间的关系。如bmw IS A汽车,而私有继承(默认情况下,当没有明确指定和你在这里有什么)代表代表执行的关系。
尝试:
class Bmw: public Car
{
// ...
];
答
我不是机械师,但class Bmw: public Car
应该修正你和有你的道路上,以在任何时间了解继承!
默认情况下,private
为class
es(public
为struct
s)。
为什么“开始”不是汽车的一种方法? – Johnsyweb 2010-05-26 12:46:58
此外,您不需要将汽车称为Car :: Car(),将它称为Car就可以。 'Bmw :: Bmw():Car(){}'是完全有效的。 – Puppy 2010-05-30 19:21:13