從C語言到C++語言,是面向過程到面向對象編程的跨越。面向對象編程的特點就是繼承和動態綁定。C++通過類的派生來實現繼承,通過虛擬函數支持動態綁定,虛擬函數提供了一些封裝類體系實現細節的方法。
面向對象編程的關鍵概念
抽象(abstraction)——去除對象中不必要的細節,保留描述對象本質特征的關鍵字,抽象是一種設計活動。
類 —— 是一種用戶自定義類型,就好像int這樣的內置類型一樣。類機制必須允許程序員規定它所定義的類能夠進行的操作。類裡面的東西任何東西被稱為類的成員。概括 說, 類是由一組數據結構和定義在該結構上的一組操作的集合。
對象(object)——某個類的一個特定變量,對象也被稱作類的實例
封裝(encapsulation)——把類型、數據和函數組合在一起組成一個類。
繼承(inheritance)——允許類從一個更簡單的基類中接受數據結構和函數。派生類可獲得基類的數據和操作,並可根據需要對它們進行改寫,也可以在派生類中增加新的數據類型和函數。
《C++ 設計新思維》 下載見 http://www.linuxidc.com/Linux/2014-07/104850.htm
C++ Primer Plus 第6版 中文版 清晰有書簽PDF+源代碼 http://www.linuxidc.com/Linux/2014-05/101227.htm
讀C++ Primer 之構造函數陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm
讀C++ Primer 之智能指針 http://www.linuxidc.com/Linux/2011-08/40177.htm
讀C++ Primer 之句柄類 http://www.linuxidc.com/Linux/2011-08/40175.htm
將C語言梳理一下,分布在以下10個章節中:
抽象
抽象——就是觀察一群事物,並認識到它們具有一些共同的主題,只記錄能表現事物特征的關鍵數據項。當你這樣做的時候就是在進行抽象,所存儲的數據類型就是抽象數據類型。抽象本身是對事物的簡化。
抽象建立了一種抽象數據類型,C++使用類(class)這個特性來實現它。它提供了一種自上向下的、觀察數據類型屬性的方法來看待封裝:把用戶定義類新型中的各種數據結構和方法組合在一起。它同時也提供一種從底向上的觀點看封裝:把各種數據和方法組合在一起實現一種永和自定義類型。
抽象的好處:
————————————————————————
封裝
當你把抽象數據類型和他們的操作捆綁在一起的時候,就是進行封裝。非OOP語言沒有完備的機制來實現封裝。
程序設計藝術的當前狀態就是面向對象語言,它們通過把用戶自定義的數據結構和用戶定義的能夠在這些數據結構上進行操作的函數捆綁在一起實現了數據的完整性,別的函數無法訪問這些內部數據。
————————————————————————
訪問控制
訪問控制說明了誰可以訪問接下來聲明的數據或函數。C++中訪問控制如下
(後兩者每次只能用於一條聲明)
————————————————————————
聲明
C++類的聲明就是正常的額C聲明,內容包括函數、類型或數據。類把他們捆綁在一起,類中的每個函數都需要一個實現,通常的做法是將它們放在類外部。
class Fruit{
public:
peel();
slice();
juice();
private:
int weight;
int height;
};
當成員函數在類外部實現時,前面必須加一些特別的前綴::。“::”被稱作“全局范圍分解符”,跟在他前面的就是進行查找的范圍。如果::前面沒有標示符就表示查找范圍為全局范圍。
void Fruit::peel(){ std::cout<<"in peel"<<endl;}
調用成員函數
Fruit melon, orange, banana;
main(){
melon.slice();
orange.juice();
return 0;
}
調用一個類的對象的成員函數相當於面向對象編程語言使用的“向對象發送一條信息”術語。每個成員函數都有一個this指針,它是隱式賦給函數的,它允許對象在成員函數內部引用對象本身。
————————————————————————————
構造函數和析構函數
當類的一個對象被創建時,構造函數就會被隱式調用,它負責對象的初始化。與之相對應的,類存在一個清理函數稱為析構函數。當對象被銷毀(超出生存范圍或進行delelte操作,回收它所使用的堆內存),析構函數就自動調用。析構函數不如構造函數常用,它裡面的代碼一般用於處理一些特殊的終止要求以及垃圾回收等。析構函數不僅能清除對象,還清理對象所持有的鎖。
構造函數和析構函數是非常需要的,因為類外部的任何函數都不能訪問類的private數據成員,因此需要類內部有個特權函數來創建一個對象並對其初始化。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-10/108585p2.htm