C 高階小結

2022-03-21 19:40:14 字數 2945 閱讀 5338

1.c++中類的不同儲存區的物件的初始值

class test;

1

class

test211

intgetj()

1215 };

1.在堆上建立物件時,成員變數初始值為隨機值

test *p = new test;

2.在棧上建立物件時,成員變數初始值為隨機值

test t;

3.在靜態儲存區建立物件時,成員變數初始為0

全部變數:test t;

靜態變數 static test t;

2.c++類中const問題

const物件只能呼叫const成員函式,const成員函式也只能呼叫const成員函式,類成員中const成員是唯讀變數,可以通過修改指標指向的值來修改

3.類中成員函式與物件的關係

類的每個物件都擁有一套自己的成員變數,但是成員函式僅有一套,所有的物件共用這一套函式,函式被不同物件呼叫的區別在於類中提供了乙個this指標,該指標指向特定的物件

4.拷貝建構函式中的const 物件為何直接呼叫成員private變數?

1

class

test25

6 test(const test&t)

7

我們都知道私有成員是可以通過成員函式來使用,拷貝建構函式是特殊的成員函式,所以可以直接使用privete成員

5.類中靜態變數

公有靜態變數可以被類名和物件名直接呼叫

私有靜態變數只能通過物件名呼叫

靜態變數只能在類外初始化,因為靜態變數不屬於任何乙個物件

6.靜態成員函式與普通成員函式的區別

靜態成員函式中沒有this指標

靜態成員函式只能訪問靜態成員函式和靜態變數(類似於const)

公有靜態成員函式可以通過類名直接呼叫,也可以通過物件名(不分public和private),普通成員函式只能通過物件名呼叫,因為需要與對應的this指標相匹配

7.函式過載

函式名和函式引數是用來確定函式的,僅靠函式名不可以,且過載函式必須在同一作用域

靜態函式可以和普通函式構成過載(同一作用域)

類中也可以過載函式(建構函式)

相同的引數,不同的順序也能發生過載

1

double fun(int i,doublej)2

56double fun(double j,inti)7

函式返回值不能做過載依據

形參中存在const不能過載

double fun(const

int i,double

j);double fun(int i,double j);

8 彙編**與源**

現代編譯器會自動進行優化,導致原始碼的二進位制**被優化後無法區別,如前置++和後置++ ,所有無法從彙編**獲取程式原始碼 

9 隱式型別轉換

short 和 char 型做運算得到的結果為 int型,而非直觀上的short型,因為4位元組整型運算更加高效

10 轉換建構函式

1

class

test25

6 test(int

i){}

7 }

如果存在如下**

test t;

t=5;

此時就會呼叫test(int i)這個函式**換建構函式),等價於t=test(5), 類似於將int 型別轉換為test型別

可以在轉換建構函式前新增 explicit 關鍵字來阻止編譯器自動隱式轉換

注:轉換建構函式只有乙個引數,且該引數型別為其他型別(不能是類本身型別)

11 型別轉換函式

類中的成員函式  operator type() ,type 為不同於類型別

與轉換建構函式類似

呼叫方式:隱式呼叫

12 子類中可以定義父類中的同名成員,但子類成員會隱藏(不等於沒有)父類的成員,如果需要呼叫父類成員變數,需要加上父類的作用域分辨符

13   建構函式內部是不會發生多型,在建構函式執行時,虛函式表指標未被正確初始化,只會呼叫當前類中的版本

析構函式內部也不可能發生多型行為,在析構函式執行時,虛函式表指標已經被摧毀,只會呼叫當前類中的版本

建構函式不能成為虛函式,因為虛函式指標未被正確初始化

析構函式可以發生多型,既可以成為虛函式

14 函式模板建立過程中會有兩個步驟

1.對模板本身進行編譯

2.對替換後的**進行編譯

15 類模板特化只是模板的分開實現,本質上還是同乙個類模板

16 重定義是乙個類模板和乙個新類(或者兩個類模板),使用的時候需要考慮如何選擇的問題

特化是以統一的方式使用類模板和特化類,編譯器會優先選擇特化類

17 智慧型指標 #include

auto_ptr:乙個指標物件只能指向一片位址,且某一片位址只能被乙個auto_ptr指標所指向,一旦發生賦值操作,記憶體所有權就會轉換

share_ptr指標變數可以多個共享一片記憶體

unique_ptr與auto_ptr類似,但是不能轉換記憶體所有權

qt中的智慧型指標:

-------qpointer

優點:可以多個指標指向同一片記憶體,但是一旦記憶體被釋放,所有的指標全為null,

缺點:析構時不會自動銷毀所指向的記憶體

-------qsharepointer

它屬於引用計數型指標,只有當引用計數為0時才會銷毀物件

18 關鍵字 typeid()

當引數為型別名時,則返回型別名

當引數為變數時:

變數型別為普通型別時,則返回靜態型別

變數型別為類型別,且不含虛函式時,則返回靜態型別

變數型別為類型別,且含有虛函式時,則返回動態型別

19 編譯器選擇函式順序

函式過載->函式模板->變參函式

ps:持續更新

函式高階小結

目錄十 一 匿名函式 十二 面向過程程式設計 python從入門到放棄完整教程目錄 def f1 x 10 def f2 print x 10 x 1000 f1 10 print x 1000def f1 x 10 def f2 print x 10 return f2 f f1 f2 f f2 ...

Python高階小結

目錄 三 資料型別內建方法 3.2 字串型別內建方法 3.3 列表型別內建方法 3.4 元祖型別內建方法 3.5 字典型別內建方法 3.6 集合型別內建方法 3.7 布林型別 四 資料型別分類 python從入門到放棄完整教程目錄 萬能捕捉異常公式 try 邏輯 1 0except exceptio...

函式高階小結

def f1 x 10 def f2 print x 10 x 1000 f1 10 print x 1000把函式和變數一起打包拿出去了,內部函式包含對外部作用於而非全域性作用域的引用 def f1 x def f2 print x 10 return f2 f3 f1 10 f2 f3 f2 1...