程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中派生類的構造和析構順序詳解

C++中派生類的構造和析構順序詳解

編輯:關於C++

派生類因為要調用基類, 所以構造和析構都是按照一定順序進行;

構造的順序是: 基(base) -> 派生(derived);即先構造基類, 再構造派生類;

因為 基類 是獨立於派生類的, 即不會調用派生類中的對象, 所以應該先被生成;

如果派生類先於基類生成, 則因為無法調用基類資源, 可能生成失敗;

析構的順序是: 派生(derived) -> 基(base); 即先釋放派生類, 再釋放基類;

因為 派生類 需要先釋放調用的基類資源, 所以應該優先釋放;

如果基類先析構, 則有可能某些資源被派生類占用, 可能導致析構失敗;

派生類的構造和析構順序正好相反;

代碼:

/* 
 * CppPrimer.cpp 
 * 
 *  Created on: 2013.11.12 
 *      Author: Caroline 
 */
      
/*eclipse cdt*/
      
#include <iostream>  
#include <string>  
#include <vector>  
#include <memory>  
#include <cstddef>  
      
using namespace std;  
      
class Quote {  
public:  
    //Quote() = default;  
    Quote() {  
        std::cout << "this is Quote constructor" << std::endl;  
    }  
    Quote (const std::string& book, double sales_price) :  
        bookNo (book), price (sales_price) {}  
    std::string isbn() const { return bookNo; }  
    virtual double net_price (std::size_t n) const { return n* price; } //虛函數  
    //virtual ~Quote() = default; //動態綁定析構器  
    virtual ~Quote() {  
        std::cout << "this is Quote destructor" << std::endl;  
    }  
private:  
    std::string bookNo;  
protected: //受保護類型  
    double price = 0.0;  
};  
/*
		
							
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved