不承认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; 
} 
+2

为什么“开始”不是汽车的一种方法? – Johnsyweb 2010-05-26 12:46:58

+0

此外,您不需要将汽车称为Car :: Car(),将它称为Car就可以。 'Bmw :: Bmw():Car(){}'是完全有效的。 – Puppy 2010-05-30 19:21:13

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应该修正你和有你的道路上,以在任何时间了解继承!

默认情况下,privateclass es(publicstruct s)。