C 筆試題整理

2021-06-06 20:52:53 字數 1829 閱讀 2515

1.已知string類定義如下:

class string

;嘗試寫出類的成員函式實現。

答:string::string(const char *str)

else

} string::string(const string &another)

string& string::operator =(const string &rhs)

string::~string()

2.new delete 與malloc free的聯絡和區別

答:

聯絡:

(1)二者均可用於記憶體的動態申請和釋放;

(2)對於內部資料型別的物件

(沒有構造和析構過程)

而言,他們是等價的。

區別:

(1)malloc 和free是c/c++的標準庫函式;而new和delete是c++的運算子

(2)對於非內部資料型別的物件malloc和free無法滿足動態物件的要求。因為物件在建立的同時需自動執行建構函式;在消亡的同時需自動執行析構函式,而malloc和free是庫函式不在編譯器控制許可權之內,即編譯器不能令其承擔執行建構函式和析構函式的任務,故這時需求助於new和delete(他們是運算子,在編譯器控制許可權之內)。

總結一下:

malloc和free:動態申請記憶體和動態釋放記憶體;new和delete:動態申請記憶體和動態釋放記憶體 + 初始化和清除工作。

3.建構函式中的初始化列表和賦值的區別

答:

從概念上講,可認為建構函式分為兩個階段執行:(1)初始化階段;(2)普通的計算階段(由建構函式函式體中的所有語句組成)。

不管其他成員是否在建構函式初始化列表中顯示初始化,類型別的資料成員總是在初始化階段進行初始化--使用該類的預設建構函式,即

若此類沒有預設建構函式,則必須在初始化列表中對其進行初始化。

無論是在建構函式初始化列表中初始化成員,還是在建構函式體中對他們進行賦值。最終效果是一致的,其區別的重要性取決於資料成員的型別:

(1)類型別成員----使用預設建構函式

(2)內建和符合型別成員----依賴於物件的作用域:區域性作用域成員不被初始化;全域性作用域初始為0。

注:對於const和引用型別的成員,也必須在建構函式的初始化列表中進行初始化

------源於它們本身的特點:定義時必須初始化。

4.main函式執行之前,還會執行什麼**?

答:全域性類物件的建構函式會在main之前執行(其析構函式會在main之後執行)。

那麼是全域性物件?

#include using namespace std;

class cpoint

int a;

}; cpoint a(1); //這就是全域性物件

int main()

{ cout<5.若a是乙個空類(即沒有任何成員變數和函式),則sizeof(a)的值為?為什麼

答:1

因為:c++中,乙個空類大小不是為空的,有乙個隱諱的1位元組,那時編譯器安插進取的乙個char,使得這個類在記憶體中分配獨一無二的位址。

C 筆試題整理

cthing a cthing b 2 cthing c 2 cthing test b cthing d b cthing m p c cthing m q new cthing 4 題目解析 cthing a 這裡需要看清楚,在這並不是使用預設的建構函式構造物件,定義了乙個函式 cthing b...

C 筆試題整理(一)

1.已知string類定義如下 class string 嘗試寫出類的成員函式實現。答 string string const char str else string string const string another string string operator const string r...

筆試題整理

n副撲克,張數為m,大小為1 m,每幅撲克抽一張,求和恰好為k的組合數,結果對10e9 7取餘數。思路 動態規劃。和為i,j副撲克,dp i j dp i 1 j 1 dp i m j 1 此處需要判斷 i m 0 初始化,j 1,i m,dp i j 1 i j,dp i j 1,後面的情況不可能...