class Student : public Person {
public:
Student(int num, string name, int cnum, float score) : Person(num, name); // 錯誤:類內宣告不允許初始化列表
...
};
C++ 標準規定:建構函數的初始化列表只能出現在定義(實作)處,不能出現在類別內部的宣告處。
// 類別宣告
class Student : public Person {
public:
Student(int num, string name, int cnum, float score); // 僅宣告
private:
int cnum;
float score;
};
// 類別外部定義
Student::Student(int num, string name, int cnum, float score)
: Person(num, name) // 這裡才能寫初始化列表
{
cnum = cnum;
score = score;
}
class Student : public Person {
public:
Student(int num, string name) : Student(num, name, 0, 0.0f) {} // 委派
Student(int num, string name, int cnum, float score) : Person(num, name) { ... }
};
| 錯誤寫法 | 正確寫法 |
|---|---|
宣告處加 : Base(...) | 定義處加 : Base(...) |
| 忘記在定義處初始化基類 | 務必在定義處呼叫基類建構函數 |