我對C++相對較新,我正在創建假設的「Flight Management」應用程序作爲學習體驗並測試各種新技能。簡而言之,我有一個FlightPlan
類,其中包含一個私有成員指針,指向Aircraft
類型的對象(當然,現在)。從Aircraft
衍生類成員是派生對象,其類型尚未知曉
對象是預先存在的在FlightPlan
創建時,我希望能夠分配一個Aircraft
派生對象指針FlightPlan
(所述的A/C,將執行該計劃的飛行)在建造FlightPlan
之後,而不僅僅是在施工期間。 (使用方法如
flight-plan-obj.AssignAircaft(cargo-aircraft-obj-pointer);
我的問題是Aircraft
是一個抽象類,CargoAircraft
和PassengerAircraft
從,因此它不知道什麼「類型」的過程中它的aircaft將被分配到飛行計劃派生。建設我的代碼如下(很多人都忽略了爲簡潔起見)
class FlightPlan {
private:
string departure;
string destination;
Aircraft* aircraft; // The a/c that will later be assigned to the flight
// Obviously this is currently wrong
public:
FlightPlan(string dep, string dest);
void AssignAircraft(Aircraft* ac);
// Other methods
}
的Aircraft
抽象類:
class Aircraft {
protected:
Aircaft(string tailId, string acType); // ctor for the sub-classes
string tailId;
string acType;
public:
virtual string Overview() const =0; // pure virtual method
}
而且從Aircraft
派生的對象的例子:
class CargoAircraft : public Aircraft {
private:
int cargoCapacity;
public:
CargoAircraft(string tailId, string acType, int cargoCapcity);
string Overview() const override;
}
// ctor defined in the .cpp file as:
CargoAircraft::CargoAircraft(string tailId, string acType, int cargoCapacity)
: Aircraft(tailId,acType), cargoCapacity(cargoCapacity) {};
正是我試圖做可能嗎?我的理解是,指針會多態性允許我做:
Aircraft* aircraft; or Aircaft* aircraft = nullptr;
在
FlightPlan
和後來接受Aircraft
派生的類的對象指針? 在編譯時我收到:錯誤:'飛機'沒有命名一個類型
我的方法在這裏有什麼根本錯誤嗎?我需要放棄Aircraft
是抽象的,只是把它看作更多的基類,並給它一個公共的默認構造函數,並使它的方法只是虛擬的,而不是純虛擬的?
任何和所有的建議都會得到大家的好評,我會非常感激地接受任何關於我使用C++的提示或提示。謝謝。
查看轉發聲明。 –