簡體   English   中英

組合和繼承 - 抽象類

[英]composition and inheritance - abstract class

讓我們假設我有一個超級WorkStation ,以及兩個子類StationNormalStationAdvanced 我有另一個類Robot ,它有一個WorkStation指針,它將作為StationAdvanced啟動,但它可以改變,但我的類WorkStation是一個抽象類。 我認為類Robot應該是這樣的:

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

我的問題是如果我的類WorkStation是抽象的,應該如何定義Robot類構造函數。

你需要讓StationNormalStationAdvanced繼承WorkStation一個例子是:

class StationNormal:public WorkStation
{
  ....
}

public Robot(WorkStation* workStation)
{
  actualStation = workStation;
}

在主要方法中,例如:

new Robot(new StationNormal()) ;

我認為以下內容應該足夠了:

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());

好吧,在構造函數中,您將實例化實際的WorkStation並告訴指針( WorkStation * actualStation )指向它。 把它放在你的構造函數中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM