开发者

c++ inheritance not recognized

开发者 https://www.devze.com 2023-01-01 16:03 出处:网络
Is there some so开发者_Python百科lution or I have to keep exactly class types? //header file Class Car {

Is there some so开发者_Python百科lution or I have to keep exactly class types?

//header file

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


C++ defaults to private inheritance, so, you need to declare Bmw as:

class Bmw:public Car

Also, to be completely accurate, you should really have Start as a virtual method of Car and override it as needed in descendant classes. :)


You should write class Bmw : public Car.

What you want to have here is public inheritance, but not a private one (which is default for classes in C++).


You have Bmw inheriting privately from Car, which prevents converting a Bmw reference to a Car reference. Change the definition to:

class Bmw : public Car


You need public inheritance - it represents IS A relationship between derived and base types. As in bmw IS A car, while private inheritance (the default when not explicitly specified and what you have here) represents implemented in terms of relationship.

Try:

class Bmw: public Car
{
    // ...
];


I'm no mechanic, but class Bmw: public Car should fix you up and have you on the road to understanding inheritance in no time!

Inheritance is private by default for classes (public for structs).

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号