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