1填空 1)32位C/C++程序 sizeof(int)= 4 。 sizeof(long)= 4 。 2)x86兼容機 請給出函數結果htonl(0x03) = 。 3) 堆棧是針對? 默認情況堆是屬於? CPU調度時針對? 答案 : 進程。 4)請給出表達式結果5《2= 20。 5)請給出以下程序結果 #define NUMBER 1*2+3*4 int val = 1 + 3 * NUMBER * 2; 則 val = 1+3*1*2+3*4*2= ? 2 程序題 1)請寫一個函數重載的例子。 void A(int i); void A(int i,float f); 2)請寫一個C++多態的例子。 class A { public: A() {}; virtual ~A() {}; virtual void Print() { cout << "This is A!" << endl; }; }; class B : public A { public: B() {}; ~B() {cout << "Output from the destructor of class B!" << endl;}; void Print() { cout << "This is B!" << endl; }; }; 然後再main入口函數調用如下: A *pTest = new B; pTest->Print(); delete pTest; 輸出結果是: This is B! Output from the destructor of class B! 如果將A類中析構函數前virtual去掉,輸出結果則是:This is B! 也就是說類B的析構函數沒有被調用. 3)請寫一個代碼片段完成以下功能,平台不限。 動態加載(My.dll或者My.so)調用 My 的導出函數 extern “ C” , float Function(fIoat , float)。 3 簡述題 1)請簡述stdcall cdcel pasecal的區別 1、_stdcall是Pascal程序的缺省調用方式,通常用於Win32 Api中,函數采用從右到左的壓棧方式,自己在退出時清空堆棧。VC將函數編譯後會在函數名前面加上下 劃線前綴,在函數名後加上"@"和參數的字節數。 int f(void *p) -->> _f@4(在外部匯編語言裡可以用這個名字引用這個函數) 2、C調用約定(即用__cdecl關鍵字說明)(The C default calling convention)按從右至左的順序壓參數入棧,由調用者把參數彈出棧。對於傳送參數的內存 棧是由調用者來維護的(正因為如此,實現可變參數 vararg的函數(如printf)只能使用該調用約定)。另外,在函數名修飾約定方面也有所不同。 _cdecl是C和C++ 程序的缺省調用方式。每一個調用它的函數都包含清空堆棧的代碼,所以產生的可執行文件大小會比調用_stdcall函數的大。函 數采用從右到左的壓棧方式。VC將函數 編譯後會在函數名前面加上下劃線前綴。 2)請簡述C/C++的整個編譯流程 編譯、鏈接 3)請簡述vector list map的基本功能以及注意事項 vector:支持動態數組,可通過標准數組來訪問其元素 list類支持雙向線性列表。注:list不能像vector那樣支持隨機訪問,只支持順序訪問,由於list是雙向的,所以可以從前向後也可以從後向前訪問列表。 map類支持關聯式容器。一個值映射到唯一一個關鍵字。可以通過關鍵字來查找值。注:map容器中的關鍵字是唯一的,不可以重復使用。 map類支持關聯式容器。一個值映射到唯一一個關鍵字map類支持關聯式容器。一個值映射到唯一一個關鍵字map類支持關聯式容器。一個值映射到唯一一個關鍵字map類支持關聯式容器。一個值映射到唯一一個關鍵字 4)請簡述某平台各種進程間通訊以及優缺點 5)請簡述C和C++的區別 C面向過程編程, C++面向對象編程