组成和抽象类

composition and abstract class

本文关键字:抽象类      更新时间:2023-10-16

让我假设我有一个超级类WorkStation和两个子类StationNormalStationAdvanced。我还有另一个Robot类,它具有WorkStation指针,该指针将以StationAdvanced开头,但可以更改,但是我的类WorkStation是抽象类。我认为Robot类应该是这样的:

class Robot{
 private: 
       WorkStation * actualStation;
...
}

我的问题是,如果我的类WorkStation是抽象的,应该如何定义机器人类构造函数。

我认为以下内容应该足够:

class Robot{
 private: 
        WorkStation * actualStation;
 public:
        Robot();
        Robot(WorkStation * w);
}
Robot::Robot() // constructor that takes no arguments
{
    actualStation = new StationAdvanced();
}
Robot::Robot(WorkStation * w) // constructor that takes specific WorkStation
{
    actualStation = w;
}

您可以使用:

调用它
Robot rob1(),
      rob2(new StationAdvanced()),
      rob3(new StationNormal());

您需要让StationNormalStationAdvanced继承WorkStation一个例子是:

class StationNormal:public WorkStation
{
  ....
}
public Robot(WorkStation* workStation)
{
  actualStation = workStation;
}

在主要方法中:

new Robot(new StationNormal()) ;

好吧,在您的构造函数中,您将实例化实际工作站,并告诉指针(WorkStation * actualStation)指向它。将其放入您的构造函数:

this->actualStation = new StationAdvanced(...)