建構派生類別物件時,編譯器會先呼叫基類別的建構函式,再呼叫派生類別自己的建構函式。原因在於基類別獨立於派生類別,其資料成員必須先初始化完成,派生類別才能安全使用。
解構時順序相反:先執行派生類別的解構函式,再執行基類別的解構函式。這確保派生類別先釋放自身資源,避免基類別資源被過早釋導致派生類別存取已釋放的記憶體。
/* 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