C primer學習筆記3

2021-10-02 03:25:33 字數 1339 閱讀 8456

建構函式初始值列表

如果類的成員有const, 引用,沒有提供預設建構函式的類型別。那麼我們必須通過建構函式為這些成員賦初始值。

class testcase

; private:

int i;

const int ci;

int &di;

}

一般來說,建議直接使用建構函式初始化成員。一方面是初始化和賦值關乎底層效率問題,另外一方面是一些資料成員必須被初始化。

虛函式基類希望派生類進行覆蓋的函式通常定義為虛函式,當我們使用指標或者引用呼叫虛函式時,這個呼叫將執行動態繫結,根據指標和引用指向的物件型別來決定呼叫基類版本的還是派生類版本的函式。

靜態型別和動態型別

基類的指標和引用的靜態型別可能與動態型別不一致,因為可能他指向基類的的物件,也可能指向派生類的物件。當使用乙個派生類物件為乙個基類物件初始化或者賦值時,只有派生類物件中的基類部分會被拷貝,賦值,移動,它的派生部分會被忽略掉。

new&&delete

new運算子會分配要求數量的物件並且返回乙個指向第乙個物件的指標.

int* p = new int[10];

typedef int arrt[10];

int *p = new arrt;

delete乙個指標後,指標值就變成無效了,但是許多機器上的指標仍然儲存在已經釋放了的動態記憶體的位址,這時指標就變成了空懸指標

int *p = new int[10];

cout《抽象基類

不能直接建立乙個抽象基類的物件; 派生類的建構函式只初始化它的直接基類;

基類中的析構函式最好定義為虛析構函式,這樣派生類中的析構函式就會繼承基類的析構函式,當使用基類的指標繫結了乙個派生類物件時,執行delete基類指標時,能夠確保執行派生類和基類的析構函式。

讀檔案流fstreamifstream fin;

fin.open(檔名,ios::in|ios::binary);

fin.read(unsigned char * buff, int num); //從檔案中讀取num個字元到快取中

fin.eof(); //用來檢測是不是到了檔案的末尾

fin.seekg(int offset, ios::beg) //從檔案開頭往後移offset,ios::cur 當前位置, ios::end 檔案的末尾

fin.tellg(); //返回檔案當前讀位置的位元組編碼

虛析構函式

繼承關係中處於根節點位置的類通常會定義乙個虛析構函式。

c primer 學習筆記 3 IO

1.io物件不能拷貝或賦值 ofstream out1,out2 out1 out2 錯誤 不能對流物件賦值 ofstream print ofstream 錯誤 out2 print out2 錯誤因此通常以引用方式傳遞和返回流。讀寫乙個物件通常會改變其狀態,所以不能是const referenc...

C Primer 3ed 學習筆記 (2)

c 的內建資料型別和標準庫類之間的型別是符合型別,如 指標和陣列型別。c 對陣列提供了內建支援,但是僅限於對資料則單個元素的讀寫,對整個陣列的操作則不支援 如用乙個陣列賦值給另乙個陣列 陣列名是乙個指標,但是常量指標 2.1 為什麼內建陣列型別不支援陣列之間的賦值。支援這種操作要什麼資訊?答 陣列名...

C Primer 學習筆記(3) 表示式

c 提供了一元操作符和二元操作符,另外還有三元操作符 三目操作符cond?expr1 exprl2 算術運算子 一元正號 返回運算元本身,對運算元不做任何修改。邏輯運算子 存在短路求值。優先順序表如下 precedence operator description example associati...