类成员是类型未知的派生对象



我对C++相对较新,我正在创建一个假设的"飞行管理"应用程序作为学习体验并测试各种新技能。简单地说,我有一个FlightPlan类,其中包含一个指向 Aircraft 类型的对象的私有成员指针(好吧,现在(。

Aircraft派生的对象在创建FlightPlan时是预先存在的,我希望能够在构建FlightPlan后(而不仅仅是在构建期间(将Aircraft派生对象指针分配给FlightPlan(将在计划中执行飞行的 A/C(。(使用

诸如
flight-plan-obj.AssignAircaft(cargo-aircraft-obj-pointer);

我的问题是Aircraft是一个抽象类,CargoAircraftPassengerAircraft派生,因此不知道在建造过程中将向飞行计划分配什么"类型"的空客舱。我的代码如下。(为简洁起见,省略了很多内容(

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++的任何其他提示或技巧。谢谢。

你可以做两件事,

在 FlightPlan 中,后来会接受从飞机派生的类的对象指针?编译时我收到:错误:"飞机"没有命名类型

标题必须包含在飞机类中,以便在飞行计划之前声明。或者你可以像这样使用前向声明

class Aircraft;

告诉 Aircraft 类型的编译器它存在,并且可以声明指针,您可以在类 Flightplan 中使用。

您的问题仅与飞机类型的存在有关。使用前向声明或保证在声明飞行计划之前声明了类。

附言不要忘记Aircaft类中的虚拟破坏者

最新更新