類的一些基本知識

來源:互聯網
上載者:User

一:類的初始化列表:

http://www.kuqin.com/effectivec2e/ch03c.htm

上面這篇語言易懂

http://blog.csdn.net/gzshun/article/details/7256507

這篇講的比較有道理,理據比較充分。

感受:

首先:類是個概括的概念,其應用就是對象,而對其初始化就是對其具體化;

其次:在兩篇文章中都講到一點,對於內建類型,初始化列表和初始化賦值效率都是差不多的;而對於自己定義的類型,一般初始化列表的效率高於初始化賦值。

原因在第二篇文章中討論的很清楚,對於自己定義的類型賦值其本質上講其不是一個賦值而是兩步操作,定義函數和operate調用,只不過這裡是寫成的賦值形式

二:類的申明和執行

http://topic.csdn.net/u/20100808/10/82d08af6-aa0b-4485-9b60-2591e4c1f697.html

比較贊成類是先掃描聲明在執行的這種說話。(這裡好像不對,從後面友元函數的講解可以這樣記:函數是先掃描申明後執行,變數是直接執行,當然這裡只是一種記憶方法。)

第三:類的私人成員和共有成員、保護成員

http://www.quanxue.cn/JC_CLanguage/Cpp/Cpp07.html

感受:

類一共以三種成員形式劃分了三種範圍(兩大類三小類):類本身、類的拓展類(繼承和派生)、外部函數。

其中:私人成員是類本身自己用的,保護成員是可以給拓展類用的,公有成員是可以和外部函數一起用的。其實這裡就是個範圍劃分的問題,這種範圍是“物理上”的範圍,這樣也表現出了類的封裝和繼承特性。這裡可以把不同的類看著不同的黑盒,這樣非常便於理解。

第四:友元函數

http://www.quanxue.cn/JC_CLanguage/Cpp/Cpp14.html

感受:

其實在上面的三種範圍中,從大體上可以分成兩種範圍:類和外部函數。為了串連兩大類,於是提出了友元函數的概念,這樣可以在外部範圍訪問類裡面。因此,友元函數必須在類的裡面申明,但是其不是類的成員函數,對於派生情況,友元函數只能向上繼承。

第五:虛函數

http://www.quanxue.cn/JC_CLanguage/Cpp/Cpp11.html

感受:

這點非常重要:在衍生類別中用同名函數“實裝”基類的虛函數。如果衍生類別中沒有同名函數,則仍用基類的虛函數實裝。

在這裡對於虛函數要理解一個重要問題,什麼是虛?這裡的虛其實是和實相對應的。實就是一般的函數,其是實實在在的運行;而虛函數不會向實函數那樣運行,而是實現多態性。

第六:函數指標和指標函數

http://baike.baidu.com/view/1604730.htm

感受:

一個是函數,一個是指標。其實兩者沒有什麼特別的,只是函數的傳回值和指標指向的對象和原來不大一樣,但是本質上和函數、指標一樣的,只是外表不同而已。比如,指標函數去去內容就是函數本身。

例:

int fun1(char*,int); 
int (*pfun1)(char*,int); 
pfun1=fun1; 
int a=(*pfun1)("abcdefg",7);

第七:類的this指標

http://www.cnblogs.com/st_zhang/archive/2010/09/07/1820488.html

感受:

只看了前面一點點,沒有想到類也是通過this指標進行標識的。

第八:容器的迭代器

http://blog.csdn.net/yxysdcl/article/details/5567460

感受:

有了模板,我麼可以把演算法和特定的資料類型分離開來,而有了迭代器,我們可以將演算法和特定的額容器分開來。

不論是vector的迭代器作為基礎指標類型,還是list的迭代器作為一個類,其基本思想就是統一操作,讓資料訪問的方式簡單、統一,類似指標的訪問形式。

第九:函數對象

http://www.cnblogs.com/ly4cn/archive/2007/07/21/826885.html

這裡附上c++ primer的解釋:

首先定義一個類:

struct absInt{     int operate()(int val){         return  val<0?-val:val;   }};

這裡在類裡面定義了一個重載操作符()

int i=-42;absInt absObj;unsigned int ui=absObj(i);

在這裡absObj是一個類的對象而不是函數,但是因為這個類重載了叫用作業符(),因此其有“對象()”操作,其實質是“類::operator()”。其實就這樣理解就可以,定義了叫用作業符的類,其對象稱為函數對象。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.