派生類因為要調用基類, 所以構造和析構都是按照一定順序進行;
構造的順序是: 基(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; }; /*