歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

從C語言到C++語言

從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個章節中:

  1. Linux-C成長之路(一):Linux下C編程概要 http://www.linuxidc.com/Linux/2014-05/101242.htm
  2. Linux-C成長之路(二):基本數據類型 http://www.linuxidc.com/Linux/2014-05/101242p2.htm
  3. Linux-C成長之路(三):基本IO函數操作 http://www.linuxidc.com/Linux/2014-05/101242p3.htm
  4. Linux-C成長之路(四):運算符 http://www.linuxidc.com/Linux/2014-05/101242p4.htm
  5. Linux-C成長之路(五):控制流 http://www.linuxidc.com/Linux/2014-05/101242p5.htm
  6. Linux-C成長之路(六):函數要義 http://www.linuxidc.com/Linux/2014-05/101242p6.htm
  7. Linux-C成長之路(七):數組與指針 http://www.linuxidc.com/Linux/2014-05/101242p7.htm
  8. Linux-C成長之路(八):存儲類,動態內存 http://www.linuxidc.com/Linux/2014-05/101242p8.htm
  9. Linux-C成長之路(九):復合數據類型 http://www.linuxidc.com/Linux/2014-05/101242p9.htm
  10. Linux-C成長之路(十):其他高級議題

抽象

抽象——就是觀察一群事物,並認識到它們具有一些共同的主題,只記錄能表現事物特征的關鍵數據項。當你這樣做的時候就是在進行抽象,所存儲的數據類型就是抽象數據類型。抽象本身是對事物的簡化。

抽象建立了一種抽象數據類型,C++使用類(class)這個特性來實現它。它提供了一種自上向下的、觀察數據類型屬性的方法來看待封裝:把用戶定義類新型中的各種數據結構和方法組合在一起。它同時也提供一種從底向上的觀點看封裝:把各種數據和方法組合在一起實現一種永和自定義類型。

抽象的好處:

  •   隱藏不相關的細節,把注意力集中在本質的特征上。
  •  向外部提供一個黑盒子接口。接口確定了施加在對象之上的 有效操作的集合,但不對外提供內部的實現細節。
  • 把一個復雜的系統分解成幾個相互獨立的模塊。這樣可以做到分工明確,避免組件中間不符合規則的相互作用。
  • 重用和共享代碼。    

————————————————————————

封裝

當你把抽象數據類型和他們的操作捆綁在一起的時候,就是進行封裝。非OOP語言沒有完備的機制來實現封裝。

程序設計藝術的當前狀態就是面向對象語言,它們通過把用戶自定義的數據結構和用戶定義的能夠在這些數據結構上進行操作的函數捆綁在一起實現了數據的完整性,別的函數無法訪問這些內部數據。

————————————————————————

訪問控制

訪問控制說明了誰可以訪問接下來聲明的數據或函數。C++中訪問控制如下

  • public        屬於public的聲明在類的外部可見,並可按需進行設置、調用和操縱。一般的原則是不要把類的數據做成public,因為讓類的數據保持私有才符合面向對象的理論之一;只有類本身才可以改變自己的數據,外部函數只能調用類的成員函數,這就保證了類的數據只會以合乎規則的方式被更新。
  •  protected    聲明的內容只能由該類本身的函數以及從該類所派生的類的函數使用。
  •  private        屬於private的聲明只能被該類的成員函數使用,private聲明時類外部可見的,但確實不能訪問的
  •  friend        屬於friend的函數不屬於類的成員函數,但它可以像類的成員函數一樣訪問類的private和protected成員。friend可以是一個函數也可以是一個類.

(後兩者每次只能用於一條聲明)

————————————————————————

聲明

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

Copyright © Linux教程網 All Rights Reserved