天天看點

C++面向對象程式設計的一些知識點(1)

(1)、這些函數位于同一域内,如同一類中、同一檔案中。

(2)、這些同名函數具有不同的參數特征标(特征标是指形參的個數、類型、排列順序等)。

(1)、引用在建立時必須初始化,這與指針變量的聲明不同。

(2)、引用一旦初始化為指向一個對象,它就不能改變對另一個對象的引用。指針在任何時候都可以改變為指向另一個對象。

(3)、引用必須與合法記憶體單元相關連,不存在NULL引用;指針可以指派為NULL。

(4)、從C++語言層面,引用和變量、對象一樣。從二進制層面,引用一般使用指針來實作,引用的本質是指針,但是編譯器完成了這些隐式轉換。

    C++中的new/delete除了使用友善以外,還有一個重載的原因:對于非内部資料對象,當建立對象時需要自動調用構造函數,當對象銷毀時需要自動調用析構函數,而mallo/free是庫函數,不再編譯器權限之内,無法把調用構造/析構函數的操作強加給它們。new/delete是運算符,new能夠完成動态記憶體配置設定和初始化工作,delete能夠完成清除和釋放記憶體的工作。new直接傳回目标類型的指針,而malloc傳回void*且必須首先顯式地轉換成目标資料類型後才能使用。

(1)、const常量代替#define定義常量。

(2)、使用const修飾函數的輸入參數,當函數的輸入參數為指針類型或引用類型時,為了防止有意或無意的修改它們,通常使用const修飾它們,如:                void strCopy(char *strDest, cosnt char *strSrc);

(3)、使用const修飾函數的傳回值,當函數傳回值不允許修改時,該函數傳回值應加上const修飾,特别對于傳回引用或指針的情況。

(4)、const成員函數,當一個類的某個成員函數不能修改任何一個傳遞給它的參數時,應當把它定義為類的const成員函數。

(1)、當在類構造函數中沒有明确給屬性指派時,不能假設對象的該屬性值是這樣的值或者那樣的值,它隻能是一個随機值或者說是垃圾值。

(2)、

(1)、static屬性必須初始化,不允許在類内部初始化static屬性,初始化格式如下:

資料類型 類名::變量=初始化值;

(2)、類static成員函數中沒有this指針;通路static成員函數有三種方式,即類名::static成員函數名(實參清單)、對象.static成員函數名(實參清單)與對象指針->static成員函數名(實參清單)。

(1)、當我們将一個對象指派給另一個對象時,往往潛伏着類似與淺拷貝的危機,這就需要我們自己來重載指派運算符。

(2)、在指派運算符重載的函數體内,一般按照以下步驟來編寫程式;1.)判斷是否自拷貝,若是,則立即傳回。2.)若不是自拷貝,則釋放目前對象所占資源,并給目前對象重新申請資源,從另外一個對象中拷貝資料,然後傳回。

(3)、當我們重載指派運算符後,執行p2=p1;時,p2是=運算符的發起者,右側的p1成為函數的參數,其調用形式像operator=(p2, p1);這樣。

(1)、友元關系是單向的。若A是B的友元,則不能推出B是A的友元。

(2)、友元關系不能傳遞。若A是B的友元,B是C的友元,則不能由此推出A是C的友元。

(3)、友元關系是不能繼承的。

(1)、當一個類包含來自另外一個類的對象成員時,這樣的類就稱為包含類。

(2)、當一個類包含另外一個類的對象指針成員時,這樣的類就稱為聚合類。

(1)、C++使用3種不同的方案類存儲資料,它們是自動存儲、靜态存儲和動态存儲。對象也是一個種變量,是以對象也有自動對象、靜态對象和動态對象。

(2)、自動對象:自動對象位于棧中,它在函數體内建立對象,或者在語句塊内建立對象。

(3)、靜态對象:靜态對象位于程式的靜态資料區(或者全局資料區),這種對象在程式運作期間一直存在。

(4)、動态對象:動态對象位于堆(heap)中,有new操作符産生動态對象。

(1)、對象數組:類名 數組名 [數組大小];與建立内置類型數組不同,建立對象數組時必須同時初始化,是以,會調用類的構造函數。

(2)、對象指針:對象指針主要用于通路單個對象或對象數組中的元素;

(1)、對象作為參數傳遞給函數時傳遞的是對象的一個拷貝,而不是對象本身,是以對象形參的修改與原對象無任何關系。

(2)、對象指針作為參數傳遞給函數時傳遞的對象的位址,是以對對象指針形參的操作會影響對象内部的資料。

(3)、傳遞對象引用形參雖然表面上是對象形式而不是對象指針形式,但本質上還是對象指針,是以對象引用形參的修改會映射到對象變量上。