C++ 派生类调用的默认构造函数

C++ 派生类调用的默认构造函数,c++,C++,假设我正在执行一个双人国际象棋游戏。为了简单起见,这里是我的实现的简化版本,省略了任何不相关的细节。我有一个类片段,从中派生出各种片段。在这个例子中,我只包括King一块 extern enum piece_t; extern enum color_t; class Piece { public: Piece() {} Piece(piece_t t, char r, color_t c) : type(t), representation(r), color(w

假设我正在执行一个双人国际象棋游戏。为了简单起见,这里是我的实现的简化版本,省略了任何不相关的细节。我有一个类
片段
,从中派生出各种片段。在这个例子中,我只包括
King
一块

extern enum piece_t;
extern enum color_t;
class Piece
{
public:
    Piece() {}
    Piece(piece_t t, char r, color_t c)
        : type(t), representation(r), color(white)
        {}

    char getRepresentation()
        { return representation; }
protected:
    piece_t type;
    color_t color;
    char representation;
};

class King : public Piece
{
public:
    King() {}
    King(color_t color) { Piece(K,'K',color); }
};
在另一个类中,
Board
我定义了一个成员来实例化
King

class Board
{
public:
    Board() { king = King(white); }
    friend ostream& operator<<(ostream&, const Board&);
private:
    King king;
};
课程板
{
公众:
Board(){king=king(白色);}
friend ostream&operator您的语法错误(这是合法的,但不符合您的想法)。您需要调用初始化列表中的基类构造函数:

当您进入构造函数的主体时,所有基类和数据成员都已初始化。如果不显式初始化它们,它们将得到默认初始化(这意味着在基类的情况下调用默认构造函数)

在您的代码中,您正在实例化一个本地的匿名
片段
对象。

您的语法错误(这是合法的,但不符合您的想法)。您需要在初始化列表中调用基类构造函数:

当您进入构造函数的主体时,所有基类和数据成员都已初始化。如果不显式初始化它们,它们将得到默认初始化(这意味着在基类的情况下调用默认构造函数)

在您的代码中,您正在实例化一个本地的匿名
片段
对象。

您的语法错误(这是合法的,但不符合您的想法)。您需要在初始化列表中调用基类构造函数:

当您进入构造函数的主体时,所有基类和数据成员都已初始化。如果不显式初始化它们,它们将得到默认初始化(这意味着在基类的情况下调用默认构造函数)

在您的代码中,您正在实例化一个本地的匿名
片段
对象。

您的语法错误(这是合法的,但不符合您的想法)。您需要在初始化列表中调用基类构造函数:

当您进入构造函数的主体时,所有基类和数据成员都已初始化。如果不显式初始化它们,它们将得到默认初始化(这意味着在基类的情况下调用默认构造函数)


在您的代码中,您正在实例化一个本地匿名的
Piece
对象。

Piece(K,'K',color);
创建一个临时对象。您需要使用mem初始值设定项列表。
Piece(K,'K',color);
创建一个临时对象。您需要使用mem初始值设定项列表。
Piece(K,'K',color)创建临时对象。您需要使用mem初始值设定项列表。
Piece(K,'K',color);
创建临时对象。您需要使用mem初始值设定项列表。“错误”做一些不同于intended@dypOP打算让代码执行的操作是错误的:)谢谢你+1;它解决了我的问题。你能简单解释一下为什么必须从初始化列表而不是构造函数体中调用它吗?语法是正确的wrong@TylerGaona解释就在我的回答中,“错了”做一些不同于intended@dypOP打算让代码执行的操作是错误的:)谢谢你+1;它解决了我的问题。你能简单解释一下为什么必须从初始化列表而不是构造函数体中调用它吗?语法是正确的wrong@TylerGaona解释就在我的回答中,“错了”做一些不同于intended@dypOP打算让代码执行的操作是错误的:)谢谢你+1;它解决了我的问题。你能简单解释一下为什么必须从初始化列表而不是构造函数体中调用它吗?语法是正确的wrong@TylerGaona解释就在我的回答中,“错了”做一些不同于intended@dypOP打算让代码执行的操作是错误的:)谢谢你+1;它解决了我的问题。你能简单解释一下为什么必须从初始化列表而不是构造函数体中调用它吗?语法是正确的wrong@TylerGaona我的回答中有解释。
int main(void)
{
    Board game;
    std::cout << game;
    return 0;
}
King(color_t color) : Piece(K,'K',color) {}