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)對於內部資料型別的物件
(沒有構造和析構過程)
而言,他們是等價的。
區別:
3.建構函式中的初始化列表和賦值的區別(1)malloc 和free是c/c++的標準庫函式;而new和delete是c++的運算子
(2)對於非內部資料型別的物件malloc和free無法滿足動態物件的要求。因為物件在建立的同時需自動執行建構函式;在消亡的同時需自動執行析構函式,而malloc和free是庫函式不在編譯器控制許可權之內,即編譯器不能令其承擔執行建構函式和析構函式的任務,故這時需求助於new和delete(他們是運算子,在編譯器控制許可權之內)。
總結一下:
malloc和free:動態申請記憶體和動態釋放記憶體;new和delete:動態申請記憶體和動態釋放記憶體 + 初始化和清除工作。
答:
從概念上講,可認為建構函式分為兩個階段執行:(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,後面的情況不可能...