C 快速溫習筆記 高階 4

2021-07-26 12:09:47 字數 3688 閱讀 4129

模板:

函式模板:

template ret-type func-name(parameter list)

e.g.

template

t add(t a, t b)

cout << add(3, 6) <

cout << add(1.1, 2.2) <

類模板:

template classclass-name ;

e.g.

template

class stack };

template

void stack::push (tconst& elem)

template

void stack::pop()

elems.pop_back(); }

template

t stack::top() const

return elems.back(); }

tips:

關於成員函式

const

關鍵字的說明:

要宣告乙個

const

型別的類成員函式,只需要在成員函式引數列表後加上關鍵字

const

在類體之外定義

const

成員函式時,還必須加上

const

關鍵字若將成員成員函式宣告為

const

,則該函式不允許修改類的資料成員

把乙個成員函式宣告為

const

可以保證這個成員函式不修改資料成員,但是,如果據成員是指標,則

const

成員函式並不能保證不修改指標指向的物件,編譯器不會把這種修改檢測為錯誤

const

成員函式可以訪問非

const

物件的非

const

資料成員、

const

資料成員,也可以訪問

const

物件內的所有資料成員非co

nst成員函式可以訪問非

const

物件的非

const

資料成員、

const

資料成員,但不可以訪問

const

物件的任意資料成員

作為一種良好的程式設計風格,在宣告乙個成員函式時,若該成員函式並不對資料成員進行修改操作,應盡可能將該成員函式宣告為

const

成員函式

預處理器:

預處理器是一些指令,指示編譯器在實際編譯之前所需完成的預處理。

所有的預處理器指令都是以井號(

#)開頭,只有空格字元可以出現在預處理指令之前。預處理指令不是

c++

語句,所以它們不會以分號(

;)結尾。

預處理的幾個示例:

1. 預定義常量:

#define pi 3.1415

2. 預定義方法:

#define add(a,b) a+b

3. 定義debug資訊

#define debug

#ifdef debug

cerr << "debugginginformation" << endl;

#endif

4. 取消某個定義

#undef debug

5. 組合條件判斷

#define debug

#define error

#if defined(debug) && (defined(error) || defined(warn))

cerr << "warning:blablabla" << endl;

#endif

6. 條件分支

#ifndef info

#define info 1

#else

#undef info

#define info 1

#endif

7. 注釋掉部分語句使其不參與編譯

#if 0

//code will not be compiled

#endif

8. #

運算子會把

replacement-text

令牌轉換為用引號引起來的字串,例如:

#define mkstr( x ) #x

9. ##

運算子用於連線兩個令牌,將結果轉換為字串,例如:

#define concat( x, y )x ## y

c++中預定義的巨集: 巨集

描述__line__

這會在程式編譯時包含當前行號。

__file__

這會在程式編譯時包含當前檔名。

__date__

這會包含乙個形式為

month/day/year

的字串,它表示把原始檔轉換為目標**的日期。

__time__

這會包含乙個形式為

hour:minute:second

的字串,它表示程式被編譯的時間。

e.g.

cout <<"value of __line__ : " << __line__ << endl;

cout <<"value of __file__ : " << __file__ << endl;

cout <<"value of __date__ : " << __date__ << endl;

cout <<"value of __time__ : " << __time__ << endl;

訊號處理:

訊號是由作業系統傳給程序的中斷,會提早終止乙個程式。例如在

unix

、linux

、mac os x

或windows

系統上,可以通過按

ctrl+c

產生中斷。有些訊號不能被程式捕獲,但是下表所列訊號可以在程式中捕獲,並可以基於訊號採取適當的動作。這些訊號是定義在

c++

標頭檔案中。 訊號

描述sigabrt

程式的異常終止,如呼叫 abort。

sigfpe

錯誤的算術運算,比如除以零或導致溢位的操作。

sigill

檢測非法指令。

sigint

接收到互動注意訊號。

sigsegv

非法訪問記憶體。

sigterm

傳送到程式的終止請求。

c++

訊號處理庫提供了

signal

函式,用來捕獲突發事件。

signal()

函式的定義:

void (*signal (intsig, void (*func)(int)))(int);

這個函式接收兩個引數:

第乙個引數是乙個整數,代表了訊號的編號;第二個引數是乙個指向訊號處理函式的指標。

e.g.

void signalhandler(int sig)

signal(sigint, signalhandler);

while (true)

} 可以使用

raise

函式來生成乙個

signal

,raise()

函式的定義:

int raise (signalsig);

e.g.

raise(sigint); 

Python 筆記 4 高階特性

取乙個list或tuple的部分元素是非常常見的操作。python提供了切片操作符,來完成部分元素的選取 除了上例簡單的下標範圍取元素外,python還支援一些其他的騷操作,如下 如果給定乙個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代 itera...

C 高階筆記

c c type built in,struct data function 資料和函式包在一起,資料有很多分,函式只有乙份。以此建立物件。class,struct complex c1 2,1 complex c2 complex pc new complex 0,1 string s1 hell...

讀書筆記 C 基礎知識溫習 堆疊

概念 棧區 heap 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。堆區 stack 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶。全域性區 靜態區 static 全域性變數和靜...