1. 程式人生 > >為什麽子類的初始化列表不能初始化父類的成員

為什麽子類的初始化列表不能初始化父類的成員

{} 類的初始化 初始 logs 列表 正方形 是的 一個 構造

為什麽子類的初始化列表不能初始化父類的成員

  • C++初始化列表是一種效率更高的初始化方法,但也有一些不能使用的場景。

舉個例子

  • 以下定義一個矩形,然後再定義一個正方形,繼承自矩形。
  • 這段代碼有問題嗎?
...
class Rectangle{
public:
    Rectangle() :a(0), b(0){}
    Rectangle(int x, int y) :a(x), b(y){}

public:
    int a;
    int b;
};
class Square :public Rectangle
{
public:
    Square(int x):a(x) {}
};
...
  • 是的,這段代碼是無法編譯通過的。
  • 雖然乍一看沒毛病,繼承是public繼承,構造是父類先構造,但為什麽子類用初始化列表時會報錯呢?
  • 而將子類的構造函數改成下面這樣,竟然就可以了。它們明明看起來一樣啊?
...
Square(int x)
{
    a = x;
}
...

查找原因

  • 這就要探討以下初始化列表和普通初始化的區別。

為什麽子類的初始化列表不能初始化父類的成員