2009年7月23日 星期四

我會C++嗎?

剛剛看到這篇文章 自認並沒有很熟 但是會寫一點C++的我想試著回答看看....究竟.....我可以答對多少呢?

1. 什麼是virtual inheritance? 請舉例說明。
當有一個class(稱為D好了)繼承自兩個有共同parent class(稱為A)的class時 必須使用virtual inheritance以避免來自兩個parent class(稱為B與C)的method產生衝突

2. 什麼是virtual function? 什麼是pure virtual function?
virtual function會在runtime的時候進行binding 也就是若透過parent class的pointer呼叫某method時 會根據實際指向之child class(或是事實上是該parent class)而呼叫相對應之method 若非dynamic binding的話 則會根據pointer的型態呼叫相對應的程式碼(static binding)
而pure virtual function則不指向某一段程式碼 僅用來作為一個呼叫child class的method的入口 擁有pure virtual function的class是abstract class 不可產生instance(可以產生的話就奇妙了...沒有實做的程式碼要怎麼跑...)

3. pointer與reference的差別?
pointer是一個獨立的變數 儲存的是另一個物件的位址(address) 要取得位址需使用&運算元 要dereferencing需使用*運算元
reference是一個....reference...||| 僅僅是參考到其指向的物件 相當於該物件的別名(alias) 同時也不像pointer一樣可以更換參考目標 使用時與一般變數之syntax並無不同 僅僅是宣告時要加上&

4. 什麼是static_cast, dynamic_cast, reinterpret_cast, const_cast? 他們之間的差異是?
static_cast較類似C語言的cast 在compilation time進行cast
dynamic_cast是在runtime進行cast 所以cast的成功與否會等到runtime才能獲知(例如有B,C兩個class都繼承自A 而有個A*指向B的物件 此時若要將這個pointer dynamic_cast成C就會產生問題)
reinterpret_cast我不知道
const_cast做常數性(const)的cast 我也不清楚詳細用途

5. run-time polymorphism與compile-time polymorphism的差異? 分別要如何達成?
runtime polymorphism是dynamic binding 像是virtual function即是此類
compile-time polymorphism是static binding 像是operator和function的overloading 或是template的使用 在compilation time即可確定呼叫目標 屬於此類

6. 什麼是explicit constructor?
就....明確宣告constructor吧.....|||

7. 什麼是template disambiguator? 請舉出例子。
沒聽過

8. 有沒有聽過boost or loki? 有沒有用過boost or loki? 請舉出例子。
聽過boost 用過1次 忘記用來幹嘛了 不過我知道boost是C++的utility 據說有被考慮納入STL的範疇

9. 有沒有聽過CRTP (Curiously Recurring Template Pattern)與PBCP (Parametric Base Class Pattern)? 請寫出兩者的sample code並比較它們的差異。
沒有

10. 請問在C++中, struct與class最大的差異是?
struct預設的存取權限是public 而class是private

11. 請問什麼是template partial specialization?
不知道

12. 什麼是type traits? 什麼是tag dispatch? 請以簡單的程式碼說明之。
不會XD

13. 有聽過template metaprogramming嗎? 請舉例解釋之。
聽過 不過不是很懂意思

14. 什麼是SFINAE? 請解釋之。
不會...|||

15. 為什麼常常看到template的程式碼寫在hpp裡,而不是放在cpp檔中?
因為被使用到的template在compilation time就必須產生相關程式碼 而不能到linking的時候才產生

16. 什麼是functor? 用過(或寫過)任何的functor library嗎? 例如boost function/bind或是fast delegate?
物件化的function 沒有明確用過/寫過

17. std::list與std::vector的差異是什麼? std::map裡的資料結構是如何實作的?
list並不支援random access 而vector支援之 但vector對於在前端的資料新增會花較多時間(應該是O(n))
map一般的實做應該都是利用heap

18. 何謂copy constructor? 如何阻止一個class被copy?
複製一個object時會呼叫的constructor(例如o1=o2時 o1會以copy constructor來建構)
明確宣告一個protected或是private的copy constructor即可阻止一個class「的物件」被copy
19. virtual function是如何實作的? 什麼是vtbl?
不知道 猜測是利用一個table紀錄virtual functions的symbol與實際的候選程式碼(instructions)的位址的對應 在執行時由executor選擇?
那vtbl應該就是virtual table了XD

20. 在template的宣告裡,typename與class的差異是? 為什麼有typename這個keyword?
囧 原來有差喔....|||
typename搞不好是為了相容某個別的語言而出現的 例如Objective C之類的....

21. 什麼是forward declaration?
?

22. 如何解決header file mutual inclusion的問題?
#ifndef XXX
#define XXX
//...
#endif

23. 什麼是templated class? 什麼是class template?
囧 學過但是忘了...

24. 什麼是wchar_t? 有沒有用過std::locale跟std::codecvt?
用於unicode字元的type
都沒用過

25. 用過那些c++ compiler? 有沒有聽過c++0x? 試舉出c++0x的新功能。
GCC(g++), MinGW(其實也是GCC), Visual C++(6,2005,2008)
沒聽過XD



回答完了.....答題率好像不到一半...囧....|||
所以我總是說我跟C++不熟...不知道有沒有C語言的考題 我跟C語言比較熟一點點....一點點而已啦....XD

五樓 請問這篇你給幾分?

ps. 這篇是榮譽考 我沒有查資料 所以很鳥請不要見怪 內容有錯誤人子弟也概不負責!

沒有留言:

張貼留言