C++ C++;多重继承与虚拟类
我正在尝试编写一个包含四个类的程序:车辆、汽车、飞机和飞行汽车 飞车继承自汽车和飞机,汽车和飞机都继承自汽车 车辆.hC++ C++;多重继承与虚拟类,c++,inheritance,C++,Inheritance,我正在尝试编写一个包含四个类的程序:车辆、汽车、飞机和飞行汽车 飞车继承自汽车和飞机,汽车和飞机都继承自汽车 车辆.h class vehicle { public: vehicle(); vehicle(char*, int, char*); virtual void setmodel(char*); //more functions.. ~vehicle(); protected: char* model; int speed;
class vehicle
{
public:
vehicle();
vehicle(char*, int, char*);
virtual void setmodel(char*);
//more functions..
~vehicle();
protected:
char* model;
int speed;
char* color;
};
汽车
飞机
#include "vehicle.h"
class airplane:public virtual vehicle
{
public:
airplane();
airplane(char*, int, char*);
void flying(std::ostream&);
};
飞车
#include "car.h"
#include "airplane.h"
class flyingCar: public car, public airplane
{
public:
flyingCar();
flyingCar(char*, int, char*);
};
此外,每个类的源文件都包括相关的头文件(因此thartvehicle.cpp
包括vehicle.h
,car.cpp
包括car.h
等等)
主要功能包括vehicles.h
标题和ifndef..
编译时,我在car.h中重新定义车辆类时出错,但由于我已经使用了virtual
,我不明白如何解决这个问题
我怀疑在类源文件中包含类头可能是不正确的,因为继承的头本身已经包含在继承头中,但是如果我不在这里包含它们,编译器将不会引用类原型。作为尝试,我将所有内容都包含在
ifndef..
中,但没有任何积极的结果。您应该使用include-guards
#ifndef VEHICLE_H
#define VEHICLE_H
class vehicle
{
public:
vehicle();
vehicle(char*, int, char*);
virtual void setmodel(char*);
//more functions..
~vehicle();
protected:
char* model;
int speed;
char* color;
};
#endif
因为car.h
和framework.h
都使用#include“vehicle.h”
,所以vehicle
类将在flyingCar.h
中包含各自的标题时定义两次
一般来说,您应该在所有的头、或等周围都有一个标记。@CoryKramer那么代码将受到菱形继承问题的影响。看@Daniel你说得对@πάντα ῥεῖ 那更准确,谢谢。(如果你通过标准搜索很难找到这个问题),@maja好吧,如果你知道的话,更容易找到;-)。好的,这就是它们要去的地方(我试着把它们放在源文件中…)。我习惯于将它们放在主源文件中,但我猜这不是给定的(也不是最有效的方法)。谢谢
#ifndef VEHICLE_H
#define VEHICLE_H
class vehicle
{
public:
vehicle();
vehicle(char*, int, char*);
virtual void setmodel(char*);
//more functions..
~vehicle();
protected:
char* model;
int speed;
char* color;
};
#endif