繼承與動態綁定是面向對象編程的基石,本文通過代碼示例講解基類/派生類關係、虛函數覆寫、動態綁定析構、final 限定符等核心概念。
#include <iostream>
#include <string>
#include <cstddef>
using namespace std;
class Quote {
public:
Quote() = default;
Quote(const string& book, double sales_price)
: bookNo(book), price(sales_price) {}
string isbn() const { return bookNo; }
virtual double net_price(size_t n) const { // 虛函數
return n * price;
}
virtual ~Quote() = default; // 動態綁定析構
private:
string bookNo;
protected:
double price = 0.0;
};
class Bulk_quote final : public Quote { // final 禁止繼承
public:
Bulk_quote() = default;
Bulk_quote(const string& book, double p, size_t qty, double disc)
: Quote(book, p), min_qty(qty), discount(disc) {}
double net_price(size_t cnt) const override { // 覆寫
if (cnt >= min_qty)
return cnt * (1 - discount) * price;
else
return cnt * price;
}
private:
size_t min_qty = 0;
double discount = 0.0;
};
int main() {
Quote q("CppPrimer", 99);
Bulk_quote bq("CppPrimer", 99, 10, 0.5);
size_t n = 20;
cout << "We want to buy " << n << " books." << endl;
cout << "Quote net_price : " << q.net_price(n) << endl; // 1980
cout << "Bulk_quote net_price : " << bq.net_price(n) << endl; // 990
return 0;
}
virtual 關鍵字啟用動態綁定,override 明確標註覆寫意圖protected 成員允許派生類訪問,private 不允許final 修飾類禁止繼承,修飾虛函數禁止覆寫delete 基類指針時正確調用派生類析構掌握繼承與動態綁定是設計靈活、可擴展 C++ 系統的關鍵。