class ZooAnimal { ... }; // 虛基類
class Bear : virtual public ZooAnimal { ... };
class Character { ... };
class BookCharacter : public Character { ... };
class ToyAnimal { ... }; // 虛基類
class TeddyBear : public BookCharacter, public Bear, virtual public ToyAnimal { ... };
ZooAnimal (虛基類,由 Bear 首次引入) ToyAnimal (虛基類,由 TeddyBear 直接虛繼承) Character (非虛基類,BookCharacter 的基類) BookCharacter (非虛基類,TeddyBear 第一個基類) Bear (非虛基類,TeddyBear 第二個基類) TeddyBear (最派生類)
完全相反:最派生類 → 非虛基類 (逆聲明序) → 虛基類 (逆首次出現序)。
class ZooAnimal { public: ZooAnimal() { cout << "ZooAnimal Constructor\n"; } };
class Bear : virtual public ZooAnimal { public: Bear() { cout << "Bear Constructor\n"; } };
class Character { public: Character() { cout << "Character Constructor\n"; } };
class BookCharacter : public Character { public: BookCharacter() { cout << "BookCharacter Constructor\n"; } };
class ToyAnimal { public: ToyAnimal() { cout << "ToyAnimal Constructor\n"; } };
class TeddyBear : public BookCharacter, public Bear, virtual public ToyAnimal {
public: TeddyBear() { cout << "TeddyBear Constructor\n"; } };
int main() { TeddyBear tb; }
ZooAnimal Constructor ToyAnimal Constructor Character Constructor BookCharacter Constructor Bear Constructor TeddyBear Constructor