繼承(inheritance)和動態綁定(dynamic binding) 是物件導向的重要組成部分, 即繼承(inheritance)和多態(polymorphism),
可以使 衍生類別(derived class)擁有 基類(base class) 的介面(interface);
衍生類別可以覆寫(override)基類的虛函數(virtual function), 符合特定的功能;
衍生類別可以隱式地轉換為基類 (derived-to-base conversion), 但無法復原, 因為衍生類別的對象包含自己的部分 和 基類的對象的部分;
盡量使用基類的構造器, 去構造基類的對象, 可以易於管理; 對於靜態成員,只定義(define)一次, 忽略其他定義;
可以顯示定義類無法被繼承, 在類後添加 "final" 限定詞;
代碼:
/* * CppPrimer.cpp * * Created on: 2013.11.12 * Author: Caroline */ /*eclipse cdt*/ #include <iostream> #include <string> #include <cstddef> using namespace std; class Quote { public: Quote() = default; 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; //動態綁定析構器 private: std::string bookNo; protected: //受保護類型 double price = 0.0; }; class Bulk_quote final : public Quote { //final限定詞, 無法被繼承 public: Bulk_quote() = default; Bulk_quote(const std::string&book, double p, std::size_t qty, double disc) : Quote(book, p), min_qty(qty), discount(disc) {} //使用基類的構造器 double net_price(std::size_t cnt) const override; private: std::size_t min_qty = 0; //折扣的最小量 double discount = 0.0; //折扣 }; double Bulk_quote::net_price(std::size_t cnt) const{ if (cnt >= min_qty) return cnt * (1-discount) * price; else return cnt * price; } int main (void) { Quote q("CppPrimer", 99); Bulk_quote bq("CppPrimer", 99, 10, 0.5); std::size_t n = 20; std::cout << "We want to buy " << n << " books. " << std::endl; std::cout << "Quote net_price : " << q.net_price(n) << std::endl; std::cout << "Bulk_quote net_price : " << bq.net_price(n) << std::endl; return 0; }
作者:csdn部落格 Spike_King
更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/