C 學習札記 2011 09 30

2022-02-08 02:58:23 字數 2872 閱讀 9474

1、物件由屬性(attribute)和服務(service)兩部分組成

2、物件的屬性值只應由這個物件的服務來讀取和修改

3、具有相似屬性和行為的一組物件,成為類(class)

4、在已有類的基礎上通過增加新的特性而派生出新的類,稱作繼承;原有類稱作一般類或基類,新建立的類則稱為特殊類或派生類

5、繼承意味著「自動擁有」或「隱含地複製」,即在定義新類時,只要將新類說明為某個一般類的特殊類,它就會自動的、隱含的擁有這個一般類的全部屬性和服務;在特殊類中,這些屬性和服務可以直接使用而不必重新定義

6、通過訊息在物件之間進行通訊是物件導向的乙個基本原則

7、多型性的定義是:同一操作作用於不同的類的例項,將產生不同的執行結果,即不同類的物件收到相同的訊息時,得到不同的結果。

8、多型性包含編譯時的多型性、執行時的多型性兩大類。即:多型性也分為靜態多型性和動態多型性兩種

9、靜態多型性是指定義在乙個類或函式中的同名函式,它們根據參數列(型別以及個數)區別語義,並通過靜態聯編實現,例如,在乙個類中定義的不同引數的建構函式

10、動態多型性是指定義在乙個類層次的不同類中的過載函式,它們一般具有相同的函式,因此要根據指標指向的物件所在類來區別語義,它通過動態聯編實現,例,在使用者不作任何干預的情況下,類的成員函式的行為能根據呼叫它的物件型別自動作出適應性調整,而且調整是發生在程式執行時,這就是程式的動態多型性,即,發出同樣的訊息被不同型別的物件接收時,有可能導致完全不同的行為

11、程式設計多型性的示例

多型性就是多種表現形式,具體來說,可以用"乙個對外介面,多個內在實現方法"表示。舉乙個例子,計算機中的堆疊可以儲存各種格式的資料,包括整型,浮點或字元。不管儲存的是何種資料,堆疊的演算法實現是一樣的。針對不同的資料型別,程式設計人員不必手工選擇,只需使用統一介面名,系統可自動選擇。

舉例子說明一下:

#include

class a ;

class b:public a

;  class c:public b

;  void main()

在class a的test函式前加上virtual,即在執行時多型的時候,程式輸出結果為:ccc

在class a的test函式前不加virtual,即在編譯時多型的時候,程式輸出結果為:aaa

c++的多型性:在的函式前面加上virtual關鍵字,在派生類

中重寫該函式,執行時將會根據物件的實際型別來呼叫相應的函式。如果物件型別是派生類,就呼叫派生類的函式;如果物件型別是基類,就呼叫基類的函式。

12、私有成員只能被該類的成員函式所訪問,從類外不能直接訪問類的私有成員;公有成員是類的訪問介面,從類外可以直接訪問類的公有成員;保護成員的訪問控制許可權介於私有成員與公有成員之間,在該類的派生類中可以直接訪問其基類的保護成員

動態聯編又稱動態關聯

定義:編譯程式在編譯階段並不能確切知道將要呼叫的函式,只有在程式執行時才能確定將要呼叫的函式,為此要確切知道該呼叫的函式,要求聯編工作要在程式執行時進行,這種在程式執行時進行聯編工作被稱為動態聯編。

動態聯編必須包括以下方面:

成員函式必須宣告為virtual

如果基類中宣告了為虛函式,則派生類中不必再宣告。

呼叫方式:

通過物件的指標或引用呼叫成員函式;或通過成員函式呼叫,反之就無法實現動態聯編。

例如:#include

using namespace std;

const float pi=3.14159;

class circle1

private:

float radius;

};class circle2:public circle1

private:

float radius;

};void main()

cout<<"the area of the circle"}  }

14、動態聯編是實現多型性的一種重要形式

15、在c++中訊息傳遞是通過成員函式呼叫來實現的

16、c++允許友元從類外直接訪問類的私有成員

17、靜態聯編

靜態聯編是指聯編工作出現在編譯連線階段,這種聯編又稱早期聯編,它解決了程式中的操作呼叫與執行該操作**間的關係。

靜態聯編

靜態聯編含義:

在編譯時所進行的這種聯編又稱靜態束定,在編譯時就解決了程式中的操作呼叫與執行該操作**間的關係。

例7.3.1 乙個靜態聯編的例子。

#include

class point

float area( )

};const float pi=3.14159;

class circle:public point

float area( )

};void mian()

程式結果為:

the area of the point p is 0

the area of the circle c is 19.634937

18、#include是一條預處理命令,功能是要求編譯器在對程式進行預處理時,將其後的檔案的**嵌入到程式中

19、cout是系統預定義的乙個標準輸出裝置,一般代表顯示器

20、cin是系統預定義的乙個標準的輸入裝置,一般代表鍵盤

21、c++中識別符號是嚴格區分大小寫的,並且識別符號只能由大/小寫字母,數字(0~9)和下劃線組成,並且第乙個字元必須是字母或下劃線

22、**中的空白是空格、製表符(按tab鍵產生的字元)、換行符(按enter鍵產生的字元)和注釋的總稱,空白在編譯的時候會被忽略

23、在用c++語言編寫好源程式後,還需要進行編輯、編譯、連線和執行四個步驟;「編輯」後儲存成*.cpp檔案,「編譯」後產生二進位制目標檔案*.obj;「連線」(把目標檔案和其他分別編譯生成的目標**模組(如果有的話)以及系統提供的標準庫函式連線在一起,生成可直接執行的可執行檔案)後產生可執行檔案;「執行」可執行檔案

C 學習札記20140312

謹記,但凡使用了迭代器的迴圈體,都不要向迭代器所屬的容器新增元素!vector物件可以動態增長,但不能應用在範圍for的語句中對vector物件增加元素,還有任何改變vector物件容量的操作都會使得該物件的迭代器失效!不能解引用迭代器的end成員所指向的元素,因為end是指向迭代器的尾後,解引用就...

C 學習札記20140318

陣列的兩個特殊性質1不允許拷貝陣列,2使用陣列時會將其轉換成指標 我們可以把形參寫成類似陣列的形式 儘管形式不同,但是這三個函式是等價的,形參完全一樣 const int void print const int void print const int 函式的意圖是作用乙個陣列 void prin...

C 學習札記 2011 10 06

1 為了書寫方便,可將short int簡寫成short,即預設情況下short表示的意思是短整形,可類推long則表示長整型 2 單精度 float 32bit 雙精度 double 64bit 長精度 long double 80bit 統稱為浮點型 或實數型別 3 在c 中,整型常量可以用十進...