c ++继承无法识别

Mel*_*oun 1 c++ oop inheritance

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

//头文件

Class Car {
public:
    Car();
    virtual ~Car();
};

class Bmw:Car {
public:
    Bmw();
    virtual ~Bmw();
};

void Start(Car& mycar) {};
Run Code Online (Sandbox Code Playgroud)

// 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;
}
Run Code Online (Sandbox Code Playgroud)

Don*_*nie 14

C++默认为私有继承,因此,您需要将Bmw声明为:

class Bmw:public Car
Run Code Online (Sandbox Code Playgroud)

另外,为了完全准确,你应该真正拥有Start一个虚拟方法,Car并在后代类中根据需要覆盖它.:)


Cos*_*ert 8

你应该写class Bmw : public Car.

你想要的是公共继承,但不是私有(这是类的默认值C++).


Mik*_*our 5

您已Bmw私有继承Car,这会阻止将Bmw引用转换为Car引用.将定义更改为:

class Bmw : public Car
Run Code Online (Sandbox Code Playgroud)