C++多重继承和虚拟类
C++ multiple inheritance and virtual class
我正在尝试编写一个包含四个类的程序:车辆,汽车,飞机和飞行汽车。
飞行汽车继承自汽车和飞机,汽车和飞机都继承自车辆。
车辆.h
class vehicle
{
public:
vehicle();
vehicle(char*, int, char*);
virtual void setmodel(char*);
//more functions..
~vehicle();
protected:
char* model;
int speed;
char* color;
};
车.H
#include "vehicle.h"
class car:public virtual vehicle
{
public:
car();
car(char*, int, char*);
void driving(std::ostream&);
};
飞机.h
#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*);
};
此外,每个类的源文件都包含相关的头文件(因此 thart vehicle.cpp
包括 vehicle.h
,car.cpp
包括 car.h
等等)。
主函数包括vehicles.h
标头和ifndef..
。
当我编译时,我在car.h中重新定义类车辆时出现错误,但由于我已经使用了virtual
,我不明白如何解决问题。
已经包含在继承标头本身中,但是如果我不在此处包含它们,编译器将不会引用类原型。作为尝试,我将所有内容都封闭在ifndef..
中,但没有积极的结果。
你应该使用包含守卫
#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
和airplane.h
都使用#include "vehicle.h"
所以当Vehicle
类各自的标头都包含在flyingCar.h
中时,它们将被定义两次。
一般来说,您应该在所有标头周围设置标头保护装置,或等效项,例如 #pragma once
等。
相关文章:
- 虚拟继承中是否存在多重继承?
- 多重继承导致虚假的模糊虚拟函数过载
- 仅函数的多重继承 - 没有虚拟和 CRTP
- 使用具有虚拟多重继承的基构造函数
- 具有虚拟多重继承的构造函数定义
- 通过相同的纯虚拟方法,来自不同抽象基础的C 多重继承
- 虚拟继承如何解决 c++ 中的多重继承(钻石)?它将走哪条路
- C 多重继承,虚拟方法覆盖问题和协变量返回类型
- 关于C 接口(纯虚拟类)/多重继承/虚拟继承的设计Qustion
- 纯虚拟继承、多重继承和C4505
- 虚拟多重继承和强制转换
- 使用虚拟基类时,多重继承是如何工作的
- 纯虚拟函数和多重继承
- 可以通过虚拟支持多重继承
- 如何使用多重继承内联虚拟
- 虚拟类多重继承
- MinGW 4.7.0 到 4.7.2 错误:使用混合虚拟和非虚拟多重继承时成员函数中的"this"指针无效
- C++纯虚拟多重继承
- 如果QObject是从direct派生的,那么使用“虚拟”多重继承是否安全?
- 虚拟多重继承和指针