順序規則
- 虛擬基類別依宣告順序最優先建構(由內而外)。
- 非虛擬基類別依宣告順序建構。
- 派生類別自身建構。
- 解構順序完全相反。
程式碼示範
/* cppprimer.cpp
* Created on: 2014.1.10
* Author: Spike
*/
#include <iostream>
#include <string>
class ZooAnimal {
public:
ZooAnimal() { cout << "ZooAnimal Constructor!" << endl; }
void zooprint() { cout << "Zoo Animal!" << endl; }
};
class Bear : public virtual ZooAnimal {
public:
Bear() { cout << "Bear Constructor!" << endl; }
void bearprint() { cout << "Bear!" << endl; }
};
class Character {
public:
Character() { cout << "Character Constructor!" << endl; }
};
class BookCharacter : public Character {
public:
BookCharacter() { cout << "BookCharacter Constructor!" << endl; }
};
class ToyAnimal {
public:
ToyAnimal() { cout << "ToyAnimal Constructor!" << endl; }
};
class TeddyBear : public BookCharacter, public Bear, public virtual ToyAnimal {
public:
TeddyBear() { cout << "TeddyBear Constructor!" << endl; }
};
int main() {
TeddyBear TB;
}
輸出結果
ZooAnimal Constructor!
ToyAnimal Constructor!
Character Constructor!
BookCharacter Constructor!
Bear Constructor!
TeddyBear Constructor!
解析
- 虛擬基類別
ZooAnimal、ToyAnimal 最先建構(依繼承宣告順序)。
- 非虛擬基類別
Character → BookCharacter → Bear 依序建構。
- 最後建構
TeddyBear。
- 解構順序相反。