- 普通的和委託的區別是:同一個類,多個類之間【派生類-基類】
- 普通的和繼承構造的區別:是否要手動指明
// 1. 派生類顯示呼叫基類建構函式初始化
class A {
public:
A(int x, int y) {
std::cout << "A(x, y) called" << std::endl;
}
};
class B : public A {
public:
B(int a, int b, int c) : A(a, b) { // 手動呼叫A的建構函式
std::cout << "B(a, b, c) called" << std::endl;
}
};
int main() {
B obj(1, 2, 3);
}
// 特點:手動指定基類的建構函式,不能自動繼承構造。
// 2. C++11, 使用using自動繼承基類的建構函式
class A {
public:
A(int x, int y) { }
};
class B : public A {
public:
using A::A; // 繼承基類A的建構函式
};
int main() {
B obj(1, 2); // 直接使用A的建構函式
}
// 特點:自動繼承建構函式,不需要顯式初始化基類。
// 3. C++11, 委託構造:在同一個類中,一個建構函式呼叫另一個建構函式
class A {
int m_a, m_b;
public:
A(int x, int y) : m_a(x), m_b(y) {
cout << "A(int, int)" << endl;
}
// 委託構造:委託給 A(int, int) 進行初始化
A(int x, int y, const string& str) : A(x, y) {
cout << "str = " << str << endl;
}
};
// 特點:同類中不同建構函式之間的複用,適合程式碼共享。