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

C++ 派生類別建構與解構順序詳解

     編輯:關於C++

建構順序:基類別 → 派生類別

建構派生類別物件時,編譯器會先呼叫基類別的建構函式,再呼叫派生類別自己的建構函式。原因在於基類別獨立於派生類別,其資料成員必須先初始化完成,派生類別才能安全使用。

解構順序:派生類別 → 基類別

解構時順序相反:先執行派生類別的解構函式,再執行基類別的解構函式。這確保派生類別先釋放自身資源,避免基類別資源被過早釋導致派生類別存取已釋放的記憶體。

程式碼示範

/* CppPrimer.cpp
 * Created on: 2013.11.12
 * Author: Caroline
 */
#include <iostream>
#include <string>
#include <vector>
#include <memory>
#include <cstddef>
using namespace std;

class Quote {
public:
    Quote() { std::cout << "Quote constructor" << std::endl; }
    Quote(const std::string& book, double sales_price)
        : bookNo(book), price(sales_price) {}
    virtual ~Quote() { std::cout << "Quote destructor" << std::endl; }
private:
    std::string bookNo;
protected:
    double price = 0.0;
};

class Bulk_quote : public Quote {
public:
    Bulk_quote() { std::cout << "Bulk_quote constructor" << std::endl; }
    Bulk_quote(const std::string& book, double p,
               std::size_t qty, double disc)
        : Quote(book, p) {}
    ~Bulk_quote() { std::cout << "Bulk_quote destructor" << std::endl; }
};

int main() {
    Bulk_quote bq("Book", 10, 5, 0.2);
    return 0;
}

輸出結果

Quote constructor
Bulk_quote constructor
Bulk_quote destructor
Quote destructor

重點總結

  • 建構順序:基類別 → 派生類別(由內而外)。
  • 解構順序:派生類別 → 基類別(由外而內)。
  • 虛擬解構函式確保透過基類別指標刪除派生物件時正確呼叫派生類別解構函式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved