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