??????? 程序開發其實本質上和語言沒有太大的關系,語言是一個實現程序的工具。程序開發,有自己要解決的問題,要高效的開發程序,必須要對這些問題給一個好的解決。這也就是說可以通過很多語言來學習程序開發。不必太拘禮這個問題,可以用丟骰子的方法來解決選擇語言的問題。
??????? 推薦語言,C++或JAVA。畢竟是兩種非常流行的語言,學好了工作比較好找,畢竟大多數人學這玩意是為了個飯碗。相比下JAVA的市場好像大些(特別是在企業級信息管理市場),工資也比較高。JAVA還有一個好處,就是它的開發范型比較單純,概念相對好掌握。C++在系統開發方面的優勢比較明顯,開發的方法靈活,對喜歡自由性格的人比較合適。C++如果能學好,對程序開發的理解將相當的深刻,好像可以達到手中無劍,心中亦無劍的境界(特別是能深刻理解范型開發后)。
??????? 選擇一個語言后一定要堅持的用下去,這個樣才能大有收獲,不要今天說什么好就學兩下,明天說什么后就學兩下,那樣學什么語言也沒有用。
posted @
2007-01-29 22:15 walkspeed 閱讀(372) |
評論 (1) |
編輯 收藏
??? 接口,通俗的來說就是定義了一組要實現的功能,這些功能被表現為一組函數,
這些函數在語義上給定接口實現類的責任。
??? C++中常用的定義接口的方法是純虛類。但是定義的函數卻是要確定操作類型的
但是從接口在語義上的考慮,其實是不需要的。
??? 用模板技術來改變。
??? 定義一個接口類,在類中只定義接口函數,這些函數是Client要使用的,這個
類是一個模板類,如下
??? template< typename T >
??? class Interface
??? {
??? public:
??????? template< typename T1 >
??????? void Fun( const T &t );
???
??????? ......
??? };
??? 這種方式解決了接口函數被類型限制。
??? 模板類的參數是一個繼承類,這個繼承類完成實際的操作。實體類的定義如下
??? class C : public Interface< C >
??? {
??????? ......
??? };
??? 子類去一個個的實例話其實很不好,也不符合一般C++的編程方法。由于在模板
編程的情況下,更注重的是語義的符合,所以可以在子類中使用重載的方法去實現對
不同類型的實際處理(畢竟沒有類的編寫者知道自己這個類要處理的類型)。那么可
以載接口類中寫些代碼,來調用子類的函數,這種調用實際上在語義上定義了子類要
實現的責任。上面的接口的定義變成下面這個樣子
??? template< typename T >
??? class Interface
??? {
??? public:
??????? T* This( void ) { return static_cast< T* >( this ); }
??????? template< typename T1 >
??????? void Fun( const T &t )
??????? {
??????????? this->This()->Ope( t );
??????? }
???
??????? ......
??? };
???
??? 這樣,子類只用實現對不同類型的處理的Ope函數了,對外的公共接口還是一樣的。
顯現中要講基類編程子類的友員,Ope定義在protected或private作用域中。??
posted @
2007-01-13 18:06 walkspeed 閱讀(2292) |
評論 (0) |
編輯 收藏
??????? 開發方法很多,從大學中學到的瀑布式的工程方法(雖然書中有說別的方法,但其實只講了這一個方法)。這種將一切問題都確定后,生成文檔,在開始編程的方法越來越不適用了。不過我見過的公司里的管理層特喜歡用,特別是那些沒有搞過開發,憑著一張嘴的管理出生的管理者。
??????? 世界是變化的,軟件要解決的問題也是不斷的變化(人是善變的)。
posted @
2006-12-18 20:51 walkspeed 閱讀(269) |
評論 (1) |
編輯 收藏
??? 類之間的通訊和定位的封裝好是頭疼呀。思考了好長時間還是沒有什么好的解。
??? 通訊時的不通參數類型和數量,獲得響應的實體類。
??? 事件,消息,命令。表面上看差不多,媽的私底下又是有差別的,封裝不通,傳遞不通。還有不通的概念定義和解釋。
posted @
2006-10-14 12:20 walkspeed 閱讀(237) |
評論 (1) |
編輯 收藏
??? 記得在剛開始學習C++的時候,有一條規定,就是在基類中聲明的虛函數,在子類中重載時不要改變這個函數的作用域。例如在基類public中聲明的虛函數,在其子類中重載時還應該時public的。
??? 但我在看DirectShow的代碼中發現有的子類改變了父類的虛函數的作用域。先開始想,那幫人怎么會犯這么低級的錯誤,后來一想應該有其原因。在思考后,覺得改變了父類虛函數的作用域是一件很有趣的事情。如果子類的實例被轉換成父類,這個函數是可以調用的,而當他是子類時是不行的。
??? 突然我發現,這樣就要了一個層次的關系,在父類一層,何子類一層。當一個用戶在不同的層次時,操作的權利是不同的。它起到了某種限制。
呵呵,好精致的玩意。
posted @
2006-09-15 22:13 walkspeed 閱讀(643) |
評論 (2) |
編輯 收藏
??????? 前兩兩天才開始研究XVID,下了開源的包,按網上寫的方法怎么也沒編譯過去,后來自己把它編出來了。現在寫下來與大家分享。
??????? VC6下面我是怎么也沒編譯成功,個人認為在VC6下面是編譯不出來的,大家不用再試了。
??????? 我是用VC2003編譯出來的。下一個NASM.EXE,放到你的安裝目錄\Microsoft Visual Studio .NET 2003\Common7\Tools 下面就可以了。
??????? 將所有asm文件命令行中如下的語句
??????? nasm -f win32 -DPREFIX -o "$(IntDir)"\"$(InputName)".obj "$(InputPath)"
??????? 改為
??????? nasm -f win32 -DPREFIX -o $(IntDir)\$(InputName).obj $(InputPath)
??????? 將如下語句
??????? nasm -f win32 -DPREFIX -I"$(InputDir)"\ -o "$(IntDir)"\"$(InputName)".obj "$(InputPath)"
????????改為
????????nasm -f win32 -DPREFIX -I$(InputDir) -o $(IntDir)\$(InputName).obj $(InputPath)
?????????編譯就ok了
posted @
2006-06-13 22:41 walkspeed 閱讀(2310) |
評論 (7) |
編輯 收藏
??? 仿函數就是使對象使用行為看上去像個函數。
??? 函數的使用是這個樣的
??? Function(param1,param2,...)
??? 而對象的使用是這個樣的
??? Object.memberfunction(param1,param2...)
??? 而仿函數對象的使用是這個樣的
??? Object(param1,param2,...)
??? 這樣我們可以看出,從外表上看,仿函數對象和函數是一個東西。呵呵,當然他們是不同的。他們一樣不過是在使用的外形上一樣罷了。
??? 一個仿函數類如下定義
??? class ObjectFunction
??? {
??????? .......
??????? public:
??????????? 返回的類型 operator() ([param1,param2,...]);
???? };
???? 例1
???? class ObjectFunction1
???? {
????????? .......
????????? public:
????????????? void operator() () { count << "No Param ObjectFuntion" << endl;
????? };
??????例2
????? class?ObjectFunction2
????? {
?????????? ........
?????????? public:
?????????????? bool operator() (int x)
?????????????? {
?????????????????? count << "Have Param?ObjectFuntion" << endl;
?????????????????? count << "This is ObjectFuntion's Param" << x << endl;
???????????????????return true;
??????????????? }
???????? }
?????????仿函數的關鍵是要實現 operator() 運算符。
?????
posted @
2006-03-23 23:22 walkspeed 閱讀(5715) |
評論 (7) |
編輯 收藏
??? 仿函數,就是是一個類的使用看上去象一個函數。其實現就是類中實現一個operator(),這個類就有了類似函數的行為,就是一個仿函數類了。
??? 在我們寫代碼時有時會發現有些功能的實現的代碼,會不斷的在不同的成員函數中用到,但是有不好將這些代碼單立出來成為一個類的一個成員函數。但是又很想復用這些代碼。寫一個公共的函數,可以,這是一個解決方法,不過函數用到的一些變量,就可能成為公共的全局變量,再說為了復用這么一片代碼,就要單立出一個函數,也不是很好維護。這時就可以用仿函數了,寫一個簡單類,除了那些維護一個類的成員函數外,就只是實現一個operator(),在類實例化時,就將要用的,非參數的元素傳入類中。這樣就免去了對一些公共變量的全局化的維護了。又可以使那些代碼獨立出來,以便下次復用。而起這些仿函數,還可以用關聯,聚合,依賴的類之間的關系,于用到他們的類組合在一起,這樣有利于資源的管理(這點可能是它相對與函數最顯著的有點了)。如果在配合上模板技術和policy編程思想,那就更是威力無窮了,大家可以慢慢的體會。
???? 在下只是拋磚引玉,希望大家多多指教。
posted @
2006-03-22 22:15 walkspeed 閱讀(806) |
評論 (3) |
編輯 收藏