Time of Update: 2017-02-27
觀察者模式意圖:定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新。結構:優點:目標(Subject)與觀察者(Observer)間抽象耦合支援廣播通訊/通知缺點:會帶來意外更新問題樣本:考慮這樣一個例子:想知道公司最新的MM情報嗎?加入我們MM情報郵件組吧。您只需要向我們發送一封訂閱郵件即可,我們會把最新的MM情報以電子郵件形式通知您。現在我們來一步一步實現。很明顯,樣本中關心MM情況的人物即為訂閱者,我們以Subscriber表示這一類人。
Time of Update: 2017-02-27
在C++Builder中調用Matlab工具箱函數,有兩種實現方式。一種是基於Matlab環境支援,通過必要的設定實現;筆者在本刊上曾撰文對這種方式進行了專門的闡述。另一種則是完全脫離Matlab環境,通過動態串連庫方式實現對Matlab工具箱函數的調用,這可以通過一種開發平台Mediva來實現。相對來說,前者的限制因素較多,而後者則較為方便靈活。一、Mediva軟體平台Mediva是Mathtools公司推出的一種Matlab編譯開發軟體平台,提供對Matlab程式檔案(M檔案)的解釋執行和開
Time of Update: 2017-02-27
c++中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的, 既然有"顯式"那麼必然就有"隱式",那麼什麼是顯示而什 麼又是隱式的呢?如果c++類的建構函式有一個參數,那麼在編譯的時候 就會有一個預設的轉換操作:將該建構函式對應資料類型的資料轉換為該類對象 ,如下面所示:class MyClass{public:MyClass( int num );}....MyClass obj = 10; //ok,convert int to
Time of Update: 2017-02-27
#include<stdio.h>#include<stdlib.h>#include<malloc.h>struct list{ int data; struct list *next; struct list *pre; };typedef struct list node;typedef node *link;link front=NULL,rear,ptr,head=NULL;link push(int item){link
Time of Update: 2017-02-27
先簡單介紹下自己的情況,2006年普通大專院校畢業,畢業後到了北京參加軟 件測試的培訓,目前做ASP.NET網站安全等方面的測試。很多人都說技術不好才去 做測試的,很不幸言中了,我當時我的情況確實是這樣的,這大概也是很多做測 試的朋友心中的一個老梗。即使工作了,心中的夢魘一直沒能除去,所以決定試 試自己到底能不能寫點東西。在工作期間,自學SQLSERVER+ASP.NET 在工作一年 後正式參與網站開發。寫俄羅斯方塊聯機遊戲想法,源於到北京後的培訓
Time of Update: 2017-02-27
引言毫無疑問,我們都看到過像 TCHAR, std::string, BSTR 等各種各樣的字串類型,還有那些以 _tcs
Time of Update: 2017-02-27
1.簡介引用是C++引入的新語言特性。從語意上來說,引用就是一個變數的別名,就好象古代人的“字”和“號”,東坡居士和蘇軾只是一個人的不同稱呼。對引用的操作對變數產生的影響與對變數直接操作完全一樣。例如:int i = 0;int & iRef = i;iRef++; // i = iRef = 1儘管引用不使用指標的操作符(*,
Time of Update: 2017-02-27
楔子去年,周星星大哥曾經在VCKBASE/C++論壇發表過一篇文章“數組引用"以避免"數組降階”,當時我不能深入理解這種用法的含義;時隔一年,我的知識有幾經錘鍊,終於對此文章漸有所悟,所以把吾所知作想詳細道來,竟也成了一篇文章。希望本文能對新手有所啟迪,同時也希望大家發現本文中的疏漏之處後不吝留言指教。故事起源於周星星大哥給出的兩個Demo,為了節省地方,我把兩個Demo合二為一,也能說明同樣的問題:#include
Time of Update: 2017-02-27
代替 try / catch / throw 的通常做法是返回一個傳回碼(有時稱為錯誤碼),例如,printf(), scanf() 和
Time of Update: 2017-02-27
編程風格指南的使用要點在於提供一個公用的編碼規範,所有人可以把精力集中在實現內容而不是表現形式上。我們給出了全域的風格規範,但局部的風格也很重要,如果你在一個檔案中新加的代碼和原有代碼風格相去甚遠的話,這就破壞了檔案本身的整體美觀也影響閱讀規則之例外前面說明的編碼習慣基本是強制性的,但所有優秀的規則都允許例外。1. 現有不統一代碼(Existing Non-conformant
Time of Update: 2017-02-27
1.行寬原則上不超過80列,把22寸的顯示屏都占完,怎麼也說不過去;2.盡量不使用非ASCII字元;3.UNIX/Linux下無條件使用空格,MSVC的話使用Tab也無可厚非;4.函數參數、邏輯條件、初始化列表:要麼所有參數和函數名放在同一行,要麼所有參數並排分行……格式代碼風格和格式確實比較隨意,但一個項目中所有人遵循同一風格是非常容易的,作為個人未必同意下述格式規則的每一處,但整個項目服從統一的編程風格是很重要的,這樣做才能讓所有人在閱讀和理解代碼時更加容易。1.
Time of Update: 2017-02-27
注釋注釋雖然寫起來很痛苦,但對保證代碼可讀性至為重要,下面的規則描述了應該注釋什麼、注釋在哪兒。當然也要記住,注釋的確很重要,但最好的代碼本身就是文檔(self-documenting),類型和變數命名意義明確要比通過注釋解釋模糊的命名好得多。注釋是為別人(下一個需要理解你的代碼的人)而寫的,認真點吧,那下一個人可能就是你!1.注釋風格(Comment Style)使用//或/* */,統一就好。//或/*
Time of Update: 2017-02-27
1.總體規則:不要隨意縮寫;2.宏、枚舉等使用全部大寫+底線;3.變數(含類、結構體成員變數)、檔案、命名空間、存取函數等使用全部小寫+底線,類成員變數以底線結尾,全域變數以g_開頭;4.參考現有或相近命名規範……命名規範最重要的一致性規則是命名管理,命名風格直接可以直接確定具名實體是:類型、變數、函數、常量、宏等等,無需尋找實體聲明,我們大腦中的模式比對引擎依賴於這些命名規則。命名規則具有一定隨意性,但相比按個人喜好命名,一致性更重要,所以不管你怎麼想,規則總歸是規
Time of Update: 2017-02-27
1.對於智能指標,安全第一、方便第二,儘可能局部化(scoped_ptr); 2.引用形參加上const,否則使用指標形參;3.函數重載的使用要清晰、易讀;4.鑒於容易誤用,禁止使用預設函數參數(值得商榷);5.禁止使用變長數組;6.合理使用友元……Google特有的風情Google有很多自己實現的使C++代碼更加健壯的技巧、功能,以及有異於別處的C++的使用方式。1.智能指標(Smart
Time of Update: 2017-02-27
關於類的注意事項,總結一下:1. 不在建構函式中做太多邏輯相關的初始化; 2. 編譯器提供的預設建構函式不會對變數進行初始化,如果定義了其他建構函式,編譯器不再提供,需要編碼者自行提供預設建構函式;3. 為避免隱式轉換,需將單參數建構函式聲明為explicit;……類類是C++中基本的代碼單元,自然被廣泛使用。本節列舉了在寫一個類時要做什麼、不要做什麼。1.
Time of Update: 2017-02-27
範圍1. 命名空間(Namespaces)在.cc檔案中,提倡使用不具名的命名空間(unnamed namespaces,譯者註:不具名的命名空間就像不具名的類一樣,似乎被介紹的很少:-()。使用具名命名空間時,其名稱可基於項目或路徑名稱,不要使用using指示符。定義:命名空間將全域範圍細分為不同的、具名的範圍,可有效防止全域範圍的命名衝突。優點:命名空間提供了(可嵌套)命名軸線(name
Time of Update: 2017-02-27
背景Google的開源項目大多使用C++開發。每一個C++程式員也都知道,C++具有很多強大的語言特性,但這種強大不可避免的導致它的複雜,這種複雜會使得代碼更易於出現bug、難於閱讀和維護。本指南的目的是通過詳細闡述在C++編碼時要怎樣寫、不要怎樣寫來規避其複雜性。這些規則可在允許代碼有效使用C++語言特性的同時使其易於管理。風格,也被視為可讀性,主要指稱管理C++代碼的習慣。使用術語風格有點用詞不當,因為這些習慣遠不止原始碼檔案格式這麼簡單。使代碼易於管理的方法之一是增強代碼一致性,讓別人可以
Time of Update: 2017-02-27
可變參數的英文表示為:variable
Time of Update: 2017-02-27
在建構函式中調用虛成員函數,雖然這是個不很常用的技術,但研究一下可以加深對虛函數機制及物件建構過程的理解。這個問題也和一般直觀上的認識有所差異。先看看下面的兩個類定義。struct C180{ C180() { foo(); this->foo(); } virtual foo() { cout << "<< C180.foo this: " << this << " vtadr: " <&
Time of Update: 2017-02-27
代碼如下:#include <stdio.h>#include <windows.h>typedef int (*lpE_Pro_KillProcessByName)(IN const char* pchar_param_ProName);int main(int argc, char *argv[]){HINSTANCE hDll; //DLL控制代碼lpE_Pro_KillProcessByName KillProcessByName;hDll =