0

スーパークラスWorkStationと 2 つのサブクラスStationNormalがあるとしStationAdvancedます。として開始するポインターを持つ別のクラスRobotがありますが、変更される可能性がありますが、私のクラスは抽象クラスです。クラスは次のようにする必要があると思います:WorkStationStationAdvancedWorkStationRobot

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

WorkStation私の質問は、私のクラスが抽象である場合、Robot クラスのコンストラクターをどのように定義する必要があるかです。

4

3 に答える 3

1

StationNormalletおよびStationAdvancedinheritする必要がありWorkStation ます。例は次のとおりです。

class StationNormal:public WorkStation
{
  ....
}

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

たとえば、メインメソッドでは:

new Robot(new StationNormal()) ;

于 2012-10-24T17:14:58.680 に答える
1

以下で十分だと思います。

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());
于 2012-10-24T17:21:23.400 に答える
0

コンストラクターで、実際の WorkStation をインスタンス化し、ポインター ( WorkStation * actualStation) にそれを指すように指示します。これをコンストラクターに入れます:

this->actualStation = new StationAdvanced(...)
于 2012-10-24T17:14:11.947 に答える