程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第15章 面向對象編程(1)

第15章 面向對象編程(1)

編輯:C++入門知識

面向對象編程基於三個基本概念:數據抽象、繼承和動態綁定。在C++中,用類進行數據抽象,用類派生從一個類繼承另一個類:派生類繼承基類的成員。動態綁定使編譯器能夠在運行時決定是使用基類中定義的函數還是派生類中定義的函數。
面向對象編程(Object-oriented programming, OOP)
15.1 面向對象編程:概述
1.繼承
派生類(derived class)能夠繼承基類(base class)定義的成員,派生類可以無須改變而使用那些與派生類型具體特征不相關的操作,派生類可以重定義那些與派生類型相關的成員函數,將函數特化,考慮派生類型的特征。最後,除了從基類繼承的成員之外,派生類還可以定義更多的成員。
因繼承而相關聯的類為構成了一個繼承層次(inheritance hierarchy)。其中有一個類稱為根,所有其他類直接或間接繼承根類。
在C++中,基類必須指出希望派生類重定義哪些函數,定義為virtual的函數是基類期待派生類重新定義的,基類希望派生類繼承的函數不能定義為虛函數。
2.動態綁定
在C++中,通過基類的引用(或指針)調用虛函數時,發生動態綁定。引用(或指針)既可以指向基類對象也可以指向派生類對象,這一事實是動態綁定的關鍵。用引用(或指針)調用的虛函數在運行時確定,被調用的函數是引用(或指針)所指對象的實際類型所定義的。
15.2 定義基類和派生類
15.2.1 定義基類

class Item_base 

public: 
    Item_base(const string &book="",double sales_price=0.0):isbn(book),price(sales_price){} 
    string book() const {return isbn;} 
    virtual double net_price(size_t n) const 
    { 
        return n*price; 
    } 
    virtual ~Item_base(){} 
private: 
    string isbn; 
protected: 
    double price; 
}; 
1. 基類成員函數
保留字virtual的目的是啟動動態綁定。成員默認為非虛函數,對非虛函數的調用在編譯時確定。為了證明函數為虛函數,在其返回類型前面加上保留字virtual。除了構造函數之外,任何非static成員函數都可以是虛函數。保留字virtual只在類內部的成員函數中出現,不能用在類定義體外部出現的函數定義上。
基數通常應將派生類需要重定義的任意函數定義為虛函數。
2. 訪問控制和繼承
public和private標號具有普通含義:用戶代碼可以訪問類的public成員而不能訪問private成員,private成員只能由基類的成員和友元訪問。派生類對基類的public和private成員的訪問權限與程序中任意其他部分一樣:它可以訪問public成員而不能訪問private成員。
protected成員可以被派生類對象訪問但不能被該類型的普通用戶訪問。

摘自 xufei96的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved