8/28/2008

多型的陷阱

class A {...};
class B {...};
class C: public A, private B {...};

A a = new C();
B b = new C();
在C++中,繼承有public, protected and private
如果使用private的話 第6行編譯是不會過的 因為privated下是看不到的
如果是protected 則在可視scope下才能用

這點是java或其他OO語言沒有的

8/27/2008

差點被考到的程式碼

昨天面試 其中一個主管很在意coding能力
我也跟他說我coding很好
他就要考考我
考了兩題後 他發現太無趣了 就從一堆題目中找了一題出來
說這題過去沒幾個人講的出來
#define fun(A, b) (int)(&(((A *)0)->b))

typedef struct {
  char str[40];
  int type;
  int maxLen;
} intf;
問題是fun(intf, maxLen)的值為多少

看到第一眼時 先假裝鎮定 但不解 A * 的作用
因為腦殘沒看到typedef 想說A替換後只是變數不是型別
所以就靠推理的方式理解成強制轉型為pointer 並以此位置為0
所以b的位置就是 sizeof(char) * 40 + sizeof(int)
答案是對的 還告訴我它叫offset 差點被他唬到

回家查了一下
原來這個code是在stddef.h裡
目的是做出泛型計算變數在struct的offset

8/01/2008

100種生活

詞 鍾成虎 曲 盧廣仲
*
整個世界 停止 不轉動 很寂寞
走在海邊 數著 螢火蟲 好困惑
想要的生活怎麼有一百種
不想掉進這深深 漩渦

整個海浪 擺動 柔軟地 舉起我
孤獨給我 自由 猶豫得 好感動
想要的生活怎麼有一百種
該怎麼走 誰來告訴我 wow

每當我背對星空
抱著地球
發現自己其實脆弱 不敢說
當我背對星空 不段摸索
愛情漸漸萎縮 我猜不透
無邊的宇宙 哪裡有我想要的生活

repeat *

原來一百種 要在很久很久
以後才會懂 我的一百種生活