C++面試問題總結 2


/* 什麼是缺省函數?C++的類中有哪些缺省函數?*/


缺省函數是C++聲明一個類後編譯器默認生成的函數(如果未定義的話)


共有六個缺省函數

1. 缺省構造函數

2. 缺省拷貝構造函數

3. 缺省析構函數

4. 賦值運算符

5. 取地址運算符

6. 取地址運算符(const)


*空類不會生成任何缺省函數


/* 爲什麼會有缺省函數? */


正如自然界中人會有生老病死,類定義的對象也會有默認的行爲和特徵

缺省函數是用來控制對象的行爲,描述對象的特徵


/* 什麼情況下沒有缺省函數? */



/* 構造函數、析構函數的返回值? */


構造函數無返回值,實際返回所創建的對象的地址;

析構函數實際返回所析構對象的地址,用戶仍可使用這塊內存

(實際上析構函數什麼也沒做,所謂的析構是抽象的)


/* 內置變量是否有構造函數? */


/*
------------------------------------------------------------------------------------------
*/


/* 內部寄存器的作用? */


CPU中的一塊存儲區域,用於暫時存儲程序運行中的相關數據與運算結果


/* 寄存器的用法及特殊作用? */


eax   累加器(accumulator)  
它是很多加法乘法指令的缺省寄存器
函數返回值時做中間層


ebx   基地址(base)寄存器   

在內存尋址時存放地址


ecx   計數器(counter)   
是重複(rep)的前綴指令和LOOP指令的內定計數器


edx  
總是被用來放整數除法產生的餘數


eip

存放下一條運行的指令地址


esp

保存函數調用棧幀的棧頂地址


/* 哪些指令與寄存器關聯 */


jmp  call  指令會改變eip的值

call 指令爲函數分配棧幀 ebx / esp 會保存棧底/棧頂地址

/*
------------------------------------------------------------------------------------------
*/


/* extern 的用法 */


1. 修飾變量的聲明,引用外部定義的全局變量

2. 修飾函數聲明,引用其他文件函數,取代頭文件

3. 指示以C/C++編譯,實現C++與C及其他語言是混合編程


/*
------------------------------------------------------------------------------------------
*/


/* #if  #ifdef  #ifndef 的區別 */


#if 後面接的是表達式,如果表達式爲True,則編譯 #if 下面的代碼

#if (max == 10)


... code ...


#endif


#ifdef 後面接的是一個宏,如果定義過這個宏,則編譯下面的代碼(與邏輯true/false無關)

#ifdef MAX


... code ...


#endif


#ifndef 與 #ifdef 相反


*注意*

這幾個宏定義只是決定代碼塊是否被編譯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章