我对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++的提示或提示。谢谢。
查看转发声明。 –