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

qxu*_*u21 0 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);
Run Code Online (Sandbox Code Playgroud)

看来我必须在每个派生类中执行类似的操作:

Rook(bool owner) {
    this->owner = owner;
}
Run Code Online (Sandbox Code Playgroud)

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

Cor*_*mer 5

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

Piece(bool _owner) : owner(_owner) {}
Run Code Online (Sandbox Code Playgroud)

然后在派生类中只需传递给基类构造函数

Rook(bool owner) : Piece(owner) {}
Run Code Online (Sandbox Code Playgroud)