Re: [問題] 面試時被問到介面功能
1. C++那個不叫ADL(Koenig lookup),ADL指的是當現有scope裡面找不到,
而且也不在member function裡面的時候,怎麼擴大查找*unqualified* function name
舉例來說
int main(int argc, char *argv[]){
std::cout << "hello world" << std::endl;
return 0;
}
這邊的"<<"不是member function,而且scope是在std底下(std::operator<<),
如果沒有ADL也沒有using std,就會查不到"<<",這時候ADL便會啟動,
根據函數參數(ostream/char*)的型別,自動擴大查找函數的scope。
那個例子只是很單純的成員查找。
2. 鑽石繼承是*已被解決*的問題,只是因為C++在繼承的時候有分virtual/non-virtual
讓事情變得很複雜很容易讓人搞混,所以一般能避則避。解決方法就是既然code有多條
路線,這時候讓compiler逼你一定要選定一條路線就好。
3. 提高一下Java比率所以提一下Scala(咦)的解決方案,Scala的trait像是Java的
interface,但是trait可以有method implementation,也可以有field。
更進一步的是,有method implementation的trait一樣可以被多重繼承。
Scala對於trait的鑽石繼承處理方式是,根據簡單的規則,自動把鑽石拆成直線。
trait A
trait B extends A
trait C extends A
trait D extends B with C => chain super() call的code path會是D -> C -> B -> A
trait E extends C with B => E -> B -> C -> A
4. method signature collision,Java的態度就是...簽名一樣就是同一個人。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.34.138.208
※ 編輯: Chikei 來自: 1.34.138.208 (10/18 01:03)
→
10/18 07:05, , 1F
10/18 07:05, 1F
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章