我是否必须在C ++中为派生类编写相同的构造函数?

时间:2016-08-23 22:02:09

标签: c++ inheritance

我正在制作国际象棋游戏,我正在制作课程。有一个基础的Piece类,并且单独的Rook,Bishop,Knight,Pawn,King和Queen类继承它是有道理的。构造函数需要的唯一参数是布尔“所有者”值(它将是基类的成员):对于播放器为true,对于AI为false。我认为对象应该像这样实例化:

//create a Rook owned by the player
Rook exampleRook = new Rook(true);
//create a Knight owned by the AI
Knight exampleKnight = new Knight(false);

似乎我必须在每个派生类中做这样的事情:

Rook(bool owner) {
    this->owner = owner;
}

这似乎违反了整个继承原则:在基类中编写一次代码,然后继承。我可能不得不在基类中编写一个setOwner()函数,但似乎更有意义的是在构造函数中设置所有者而不是在单独的函数中(可以再次调用)。

1 个答案:

答案 0 :(得分:4)

您可以将成员初始化放在基类构造函数的初始化列表

Piece(bool _owner) : owner(_owner) {}

然后在派生类中直接传递给基类构造函数

Rook(bool owner) : Piece(owner) {}