假设我确实有一个接口(interface)IControllable,3个类继承了该接口(interface):MachineControllable, LightControllable, OtherControllable,它具有一些特定的数据和方法。

现在,我确实只希望所有IControllable的一个容器,所以我确实创建了一个 vector 容器。

vector<IControllable> allControllables; // and put all the MachineControllable,
//LightControllable, OtherControllable here by the IControllable interface class.

但是现在的问题是,我只能使用IControllable定义的内容,而不能使用特定Controllable的特定数据和方法。

对于每个可控对象,我应该使用单独的容器,还是我的逻辑在OOP方面是错误的?

最佳答案



不,您的逻辑还可以。问题是,您不能实例化一个抽象类。

您应该有一个保存指向IControllable接口(interface)的指针的容器,例如:

 vector<IControllable*> allControllables;

要么
 vector<std::unique_ptr<IControllable>> allControllables;

要么
 vector<std::shared_ptr<IControllable>> allControllables;

07-24 20:46