我在這里面臨一個相對棘手的情況,乍一看似乎很容易。在將這三個成員從父類移動Parent到其子類Child之后,我似乎不再能夠利用默認建構式。
為什么?有沒有一種方法可以不用專門實作 Child(...) 建構式。起初似乎違反直覺...實際上我會認為第一個示例是它失敗的地方(認為 Child 類的建構式會掩蓋其父類的建構式)。
struct Parent
{
std::string mText;
int mInt;
bool mBool;
};
struct Child : public Parent
{
};
Child test{ "", 0, false}; // Compiles
但是在后一種情況下,如果成員在子類中定義,則不會創建默認建構式。
struct Parent
{
};
struct Child : public Parent
{
std::string mText;
int mInt;
bool mBool;
};
Child test{ "", 0, false}; // error C2078: too many initializers
uj5u.com熱心網友回復:
聚合初始化中的基本子物件需要空括號。(在這種情況下,默認建構式無關緊要,兩者都是聚合Parent和Child聚合初始化。)
但是,如果物件有一個沒有任何成員的子聚合(一個空結構,或一個只包含靜態成員的結構),則不允許大括號省略,并且
{}必須使用空的嵌套串列。
Child test{ {}, "", 0, false};
// ^^
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/453465.html
