6.2 筆試真題 & 詳解
1、 static_cast與 dynamic_cast的區別。
2、const char * p; char const * p; char * const p; const char const *p; 以上四種表示的不同是什么?
3、手工實現 strcpy 函數,不能使用任何庫函數,要求處理 NULL、溢出等異常。
4、下面類的兩種不同的構造函數的區別。 Sample::Sample(string name):_name(name){}
Sample::Sample(string name){_name=name;}
5、類繼承后成員變量的可見性(三種類型的變量及 public, private類型的繼承)。
6、產生繼承類實例時構造函數的調用次序(基類包含虛函數,繼承類重寫了)。
7、空類的系統自動產生的函數(至少寫4個), class Sample{ };
8、怎么防止類被繼承?對于不能被繼承的類,怎么初始化及銷毀它的實例?
Session 21、稀疏矩陣存儲采用的數據結構及其時間復雜度,并寫出插入一個元素的函數。
2、對于給定的一個數字,將其對應的二進制的最右邊的1改為 0("turn off")例如給你。14,二進制為1110,函數處理后為1100,對應為12 ,寫出實現這個功能的函數。
3、給你了求 fibonacc 數列的遞歸實現,要求給出優化的函數。
4、多線程互斥鎖的使用,不要產生死鎖。
5、設計模式題,對于給定的類的繼承關系圖,根據新的條件修改,圖要表現出類間的關系(類間的關系有聚合,繼承,泛化等)(is_a has_a等)。
6、五張牌,兩紅三籃(你看不到顏色),目標是取到紅牌。你在第一次取后,組織者從剩余的四張中取走一張黑牌,你現在有兩種選擇:不換牌和換一次牌,問哪種選擇取得紅牌的概率大?兩種選擇不同是什么?
試題 21、static_cast與 dynamic_cast 的區別,一個靜態轉換,不提供類型檢查,不安全;一個提供動態類型檢查,運行時檢查類型,試探性的轉換,比較安全,不是該類型的父類時,返回 NULL指針。
2、const char * p; har const * p;7\ char * const p; const char const *p;以上四種表示的不同是什么? 指向常量字符串的指針,指向常量字符串的指針,字符串指針常量,指向常量字符串的字符指針。
3、手工實現strcpy函數,不能使用任何庫函數,要求處理NULL、溢出等異常;
4、下面類的兩種不同的構造函數的區別。Sample::Sample(string name):_name(name){} sample::Sample(string name){_name=name;}
解答:+line1 是構造函數初始化列表初始化,line2 是構造函數體內對成員賦值。-初始化列表初始化和構造函數體內初始化的區別主要是在與數據成員的類型。從概念上講,可以認為構造函數分兩個階段執行:(1)初始化階段;(2)普通的計算階段。計算階段由構造函數體內的所有語句完成。沒有在構造函數初始化列表里初始化的成員,使用與初始化變量同樣的規則進行初始化。運行該類型的默認構造函數來初始化類類型的數據成員。局部作用域的內臵類型成員不被初始化,全局作用域的成員初始化為有三種成員必須在初始化列表中初始化:沒有默認構造函數的類類型成員、const 成員、引用類型成員。
5、類繼承后成員變量的可見性(三種類型的變量及 public, private 類型的繼承) public 繼承:public >> public, protected>>protected, private >> private'
protected 繼承:public,protected >> protected, private>>private private 繼承:
all >> private.