剛剛看到這篇文章 自認並沒有很熟 但是會寫一點C++的我想試著回答看看….究竟…..我可以答對多少呢?
-
什麼是virtual inheritance? 請舉例說明。
當有一個class(稱為D好了)繼承自兩個有共同parent class(稱為A)的class時 必須使用virtual inheritance以避免來自兩個parent class(稱為B與C)的method產生衝突 -
什麼是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(可以產生的話就奇妙了…沒有實做的程式碼要怎麼跑…) -
pointer與reference的差別?
pointer是一個獨立的變數 儲存的是另一個物件的位址(address) 要取得位址需使用&運算元 要dereferencing需使用*運算元
reference是一個….reference…||| 僅僅是參考到其指向的物件 相當於該物件的別名(alias) 同時也不像pointer一樣可以更換參考目標 使用時與一般變數之syntax並無不同 僅僅是宣告時要加上& -
什麼是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 我也不清楚詳細用途 -
run-time polymorphism與compile-time polymorphism的差異? 分別要如何達成?
runtime polymorphism是dynamic binding 像是virtual function即是此類
compile-time polymorphism是static binding 像是operator和function的overloading 或是template的使用 在compilation time即可確定呼叫目標 屬於此類 -
什麼是explicit constructor?
就….明確宣告constructor吧…..||| -
什麼是template disambiguator? 請舉出例子。
沒聽過 -
有沒有聽過boost or loki? 有沒有用過boost or loki? 請舉出例子。
聽過boost 用過1次 忘記用來幹嘛了 不過我知道boost是C++的utility 據說有被考慮納入STL的範疇 -
有沒有聽過CRTP (Curiously Recurring Template Pattern)與PBCP (Parametric Base Class Pattern)? 請寫出兩者的sample code並比較它們的差異。
沒有 -
請問在C++中, struct與class最大的差異是?
struct預設的存取權限是public 而class是private -
請問什麼是template partial specialization?
不知道 -
什麼是type traits? 什麼是tag dispatch? 請以簡單的程式碼說明之。
不會XD -
有聽過template metaprogramming嗎? 請舉例解釋之。
聽過 不過不是很懂意思 -
什麼是SFINAE? 請解釋之。
不會…||| -
為什麼常常看到template的程式碼寫在hpp裡,而不是放在cpp檔中?
因為被使用到的template在compilation time就必須產生相關程式碼 而不能到linking的時候才產生 -
什麼是functor? 用過(或寫過)任何的functor library嗎? 例如boost function/bind或是fast delegate?
物件化的function 沒有明確用過/寫過 -
std::list與std::vector的差異是什麼? std::map裡的資料結構是如何實作的?
list並不支援random access 而vector支援之 但vector對於在前端的資料新增會花較多時間(應該是O(n))
map一般的實做應該都是利用heap -
何謂copy constructor? 如何阻止一個class被copy?
複製一個object時會呼叫的constructor(例如o1=o2時 o1會以copy constructor來建構)
明確宣告一個protected或是private的copy constructor即可阻止一個class「的物件」被copy -
virtual function是如何實作的? 什麼是vtbl?
不知道 猜測是利用一個table紀錄virtual functions的symbol與實際的候選程式碼(instructions)的位址的對應 在執行時由executor選擇?
那vtbl應該就是virtual table了XD -
在template的宣告裡,typename與class的差異是? 為什麼有typename這個keyword?
囧 原來有差喔….|||
typename搞不好是為了相容某個別的語言而出現的 例如Objective C之類的…. -
什麼是forward declaration?
? -
如何解決header file mutual inclusion的問題?
#ifndef XXX
#define XXX
//…
#endif -
什麼是templated class? 什麼是class template?
囧 學過但是忘了… -
什麼是wchar_t? 有沒有用過std::locale跟std::codecvt?
用於unicode字元的type
都沒用過 -
用過那些c++ compiler? 有沒有聽過c++0x? 試舉出c++0x的新功能。
GCC(g++), MinGW(其實也是GCC), Visual C++(6,2005,2008)
沒聽過XD
回答完了…..答題率好像不到一半…囧….|||
所以我總是說我跟C++不熟…不知道有沒有C語言的考題 我跟C語言比較熟一點點….一點點而已啦….XD
五樓 請問這篇你給幾分?
ps. 這篇是榮譽考 我沒有查資料 所以很鳥請不要見怪 內容有錯誤人子弟也概不負責!
Last modified on 2009-07-23