我正在嘗試編寫一個四類課程:車輛,汽車,飛機和飛行汽車。C++多重繼承和虛擬類
飛行汽車繼承汽車和飛機,汽車和飛機都從車輛繼承。
vehicle.h
class vehicle
{
public:
vehicle();
vehicle(char*, int, char*);
virtual void setmodel(char*);
//more functions..
~vehicle();
protected:
char* model;
int speed;
char* color;
};
car.h
#include "vehicle.h"
class car:public virtual vehicle
{
public:
car();
car(char*, int, char*);
void driving(std::ostream&);
};
airplane.h
#include "vehicle.h"
class airplane:public virtual vehicle
{
public:
airplane();
airplane(char*, int, char*);
void flying(std::ostream&);
};
flyingCar.h
#include "car.h"
#include "airplane.h"
class flyingCar: public car, public airplane
{
public:
flyingCar();
flyingCar(char*, int, char*);
};
另外,每個類的源文件都包含相關的頭文件(因此,vehicle.cpp
包括vehicle.h
,car.cpp
包括car.h
等等..)。
主要功能包括vehicles.h
標題和ifndef..
。
當我編譯我car.h中重新定義類車輛時出現錯誤,但因爲我已經使用了virtual
我不明白我怎麼能解決這個問題。
我懷疑在類源文件中包含類頭文件可能不正確,因爲繼承頭文件已包含在繼承頭文件本身中,但如果我不在這裏包含它們,編譯器將不會引用類原型。作爲一個嘗試,我把所有內容都包含在ifndef..
中,但沒有任何結果。
@CoryKramer然後代碼會受到菱形繼承問題。見http://www.cprogramming.com/tutorial/virtual_inheritance.html – Daniel
@丹尼爾你是對的! – CoryKramer
@πάνταῥεῖ更準確,謝謝。 (如果你正在尋找標準搜索,仍然很難找到這個問題), – maja