標籤:
一、概述:
物件導向編程基於三個基本概念:資料抽象、繼承和 動態綁定;
在c++中,用類進行資料抽象; 用類派生從一個類繼承另一個類:衍生類別繼承基類的成員;
多態:動態綁定使編譯器能夠在 運行時 決定是使用基類中定義的函數還是衍生類別中定義的函數;
物件導向編程的關鍵思想是多態性(polymorphism);實現多態必須通過:1、繼承 2、動態綁定
通過動態綁定(dynamic binding)能夠編寫程式使用繼承層次中任意類型的對象,無須關心對象的具體類型。使用這些類的程式
無須區分函數是在基類還是在衍生類別中定義的;
在c++中,通過基類的引用(或指標)調用虛函數時,發生動態綁定。引用(或指標)既可以指向基類對象也可以指向衍生類別對象,這一事實是動態綁定的關鍵。用引用(或指標)調用的虛函數在運行是確定,被調用的函數是引用(或指標)所指對象的實際類型所定義的;
1 void print(const base &item, size_t n) 2 { 3 os << item.net_price(n) <<endl; 4 } 5 /* 6 *base base1; 7 *diver diver1; //diver繼承base; 8 * 9 * net_price(size_t t)在base為virtual函數,並有實現(非純虛函數)10 * net_price(size_t t)在diver內也進行了函數實現11 *12 *在print中調用基類中net_price()還是衍生類別中的net_price()呢?13 * 這個是由程式在運行時決定的,關鍵在於看參數base&的引用14 * 是指向基類對象呢,還是指向衍生類別對象呢,來直接確定的;15 *(實現的基礎是:基類的引用即可以指向基類對象也可以指向衍生類別對象) 16 */
1 class Item_base{ 2 public: 3 Item_base(const std::string &book="", 4 double sales_price=0.0): 5 isbn(book), price(sales_price) 6 { 7 } 8 9 std::string book() const10 {11 return isbn;12 }13 virtual double net_price(std::size_t n) const14 {15 return n*price;16 }17 virtual ~Item_base()18 {19 }20 private:21 private:22 std::string isbn;23 protected:24 std::string isbn;25 protected:26 }27 private:28 std::string isbn;29 protected:30 double price;31 }32 /*除了建構函式之外,(解構函式最好加virtual)任意非static成員函數都可以是虛函數。33 *保留字只能在類內部的成員函式宣告中出現,不能用在類定義體外部出現的函數定義上;34 */
c++物件導向的編程