首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 虛擬繼承的建構與解構順序

     編輯:關於C++

順序規則

  1. 虛擬基類別依宣告順序最優先建構(由內而外)。
  2. 非虛擬基類別依宣告順序建構。
  3. 派生類別自身建構。
  4. 解構順序完全相反。

程式碼示範

/* 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。
  • 解構順序相反。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved