c ++继承无法识别

时间:2010-05-26 12:36:54

标签: c++ oop inheritance

是否有一些解决方案或我必须保持完全类型?

//头文件

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;
}

5 个答案:

答案 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应该帮你解决问题,让你立即理解继承!

{p>默认情况下private es classpublic s的继承为struct

相关问题