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 我也不清楚詳細用途

2009年7月18日 星期六

openSUSE安裝flashplayer plugin

要趕快記下來不然會忘記!XD

這是小弟今天的實驗結果 使用的平台是openSUSE 11.0 + Firefox 3.0.11

本來一直找不到可用的flash player plugin 套件庫的都有點問題(我是以能不能看YouTube當成能不能順利使用的指標...XD) 今天在實驗室剛好跟學弟聊到 就來試試看!

首先是學弟用Google找到的連結(關鍵字:64bit flash):
http://labs.adobe.com/technologies/flashplayer10/
這是Adobe Labs的網站 裡面有flash plugin 10的的prerelease版本可以下載 下載解壓縮後 只有看到一個libflashplayer.so檔 使用file查看:
$ file libflashplayer.so
libflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped

學弟要我把他放到 ~/.mozilla/plugins/ 裡面 不過我希望可以達到全系統的設定 所以暫時不這樣做(但後來證明這樣做是OK的)

首先 我試著把libflashplayer.so放到 /usr/lib64/mozilla/plugins/ 裡面 不過firefox找不到他:(

接著 我放到 /usr/lib/mozilla/plugins/ 裡面 firefox還是找不到他:(

只好搜尋「opensuse 11 安裝 libflashplayer.so」找到黑眼珠大大的這篇文章 不過其實我看不太懂....XD 不過 仔細閱讀之後 發現他把libflashplayer.so放在 /usr/lib/browser-plugins/ 裡面!!!!(他裡面提到nspluginwrapper 不過因為我抓的應該就是for linux的了 所以應該不需要處理就可以用) 我就如法泡製 把libflashplayer.so放在 /usr/lib64/browser-plugins/ 裡面(小弟實在是很白目 硬要先用自己覺得合理的方法做!XD) 恩 到這為止就成功了!firefox已經可以順利播放flash 雖然不知道有沒有什麼bug 但是暫時是OK的!!!

題外話 在 /usr/lib/browser-plugins/ 裡面也有一個libflashplayer.so 用file去查看發現他是32bits的:
$ file libflashplayer.so
libflashplayer.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
這就難怪我本來的firefox不能用flash了...

另外 我跟學弟討論為什麼不是放在 /usr/lib(64)/mozilla/plugins/ 底下 他說應該是openSUSE自己改的...這其實不太能確定啦~不過的確是讓人滿困惑的XD

結論 只要有正確版本的flashplayer plugin 可以放在以下3個地方來讓firefox正常執行:
1. ~/.mozilla/plugins/
2. /usr/lib64/mozilla/plugins/
3. /usr/lib/mozilla/plugins/
個人私心認為2是最好的選擇(64 bits的lib就放在lib64很合理嘛..) 而如果是非管理員的user則可以選擇放在1

這是一篇很緊張的速記 未來也沒有重構的打算 但若是有錯誤也歡迎提供指教!