Time of Update: 2017-02-27
一、概述我們在編寫程式,開發軟體的過程中如果能利用已有的程式的功能,那 麼可以大大減輕開發過程中程式員的工作量,同時達到事半功倍的效果。例如在工程中,許 多軟體需要文文書處理功能,雖然MFC提供了一些方法,但是具體實現起來既費事,又有一定的 困難,如果我們可以直接使用Office提供的功能,豈不美哉!要實現這一目的,只需要利用 ActiveX Automation 技術就可以輕鬆實現。本文主要講述了自動化的概念,並通過一個操作 Word文檔的例子來協助讀者理解VC編程中如何?自動化。二、自動化1
Time of Update: 2017-02-27
本文描述的是一種很常見的情況:當你在某個緩衝中儲存資料時,常常需要在運行時調整 該緩衝的大小,以便能容納更多的資料。本文將討論如何使用 STL 的 vector 進行記憶體的再 分配。這裡描述的是一種很常見的情況:當你在某個緩衝中儲存資料時,常常需要在 運行時調整該緩衝的大小,以便能容納更多的資料。傳統的記憶體再分配技術非常繁瑣,而且 容易出錯:在 C 語言中,一般都是每次在需要擴充緩衝的時候調用 realloc()。在 C++ 中 情況更糟,你甚至無法在函數中為 new
Time of Update: 2017-02-27
對於相加函數,應當用“值傳遞”的方式返回String對象。如果改用“引用傳遞”,那麼函數傳回值是一個指向局部對象temp的“引用”。由於temp在函數結束時被自動銷毀,將導致返回的“引用”無效。例如:c = a + b; 此時 a + b 並不返回期望值,c什麼也得不到,流下了隱患。6.3
Time of Update: 2017-02-27
由於c是char類型,取值範圍是[-128,127],如果宏EOF的值在char的取值範圍之外,那麼if語句將總是失敗,這種“危險”人們一般哪裡料得到!導致本例錯誤的責任並不在使用者,是函數getchar誤導了使用者。l 【規則6-2-3】不要將正常值和錯誤標誌混在一起返回。正常值用輸出參數獲得,而錯誤標誌用return語句返回。回顧上例,C標準庫函數的設計者為什麼要將getchar聲明為令人迷糊的int類型呢?他會那麼傻嗎?在正常情況下,getchar的確返回單個字元。
Time of Update: 2017-02-27
函數是C++/C程式的準系統單元,其重要性不言而喻。函數設計的細微缺點很容易導致該函數被錯用,所以光使函數的功能正確是不夠的。本章重點論述函數的介面設計和內部實現的一些規則。 函數介面的兩個要素是參數和傳回值。C語言中,函數的參數和傳回值的傳遞方式有兩種:值傳遞(pass by value)和指標傳遞(pass by pointer)。C++ 語言中多了引用傳遞(pass by reference)。由於引用傳遞的性質象指標傳遞,而使用方式卻象值傳遞,初學者常常迷惑不解,容易引起混亂,請先閱讀6
Time of Update: 2017-02-27
常量是一種標識符,它的值在運行期間恒定不變。C語言用 #define來定義常量(稱為宏常量)。C++ 語言除了 #define外還可以用const來定義常量(稱為const常量)。 5.1 為什麼需要常量 如果不使用常量,直接在程式中填寫數字或字串,將會有什麼麻煩?(1) 程式的可讀性(可理解性)變差。程式員自己會忘記那些數字或字串是什麼意思,使用者則更加不知它們從何處來、表示什麼。(2) 在程式的很多地方輸入同樣的數字或字串,難保不發生書寫錯誤。(3)
Time of Update: 2017-02-27
首先,實事求是地說,我的Visual C++是不是已經入門了,我不敢肯定。現在的水平是能看懂一些代碼了,或者說對於VC“脫盲”了。“N次失敗,1次成功,還學的不怎麼樣……你也太笨了吧!”如果您有這樣的評價,那麼祝賀您,您已經瞭解了我這人的99.9%。N這個數字具體是多少連我自己也記不清楚,保守地講(N≥6==TRUE)這個運算式是能夠成立的。回想我的Visual
Time of Update: 2017-02-27
l 【規則3-1-8】用正確的反義片語命名具有互斥意義的變數或相反動作的函數等。例如:int minValue;int maxValue;int SetValue(…);int GetValue(…);2 【建議3-1-1】盡量避免名字中出現數字編號,如Value1,Value2等,除非邏輯上的確需要編號。這是為了防止程式員偷懶,不肯為命名動腦筋而導致產生無意義的名字(因為用數字編號最省事)。3.2
Time of Update: 2017-02-27
C++是很多網路中繁忙網站的核心。這為構建中介層企業邏輯提供了高度的效能基礎,經常用於擴充Web伺服器和動態地產生HTML。今天使用Internet資訊服務(IIS)和Visual Studio®的開發人員可以通過動態伺服器主網頁(ASP)建立動態內容,通過ISAPI擴充IIS。但儘管ASP容易學,ISAPI只被相對較少的開發人員所使用,這主要是因為很難直接從象Visual C++®這樣的開發工具中進行定位,而且支援也僅限於庫封裝器和ISAPI擴充嚮導。ATL
Time of Update: 2017-02-27
第3章 命名規則比較著名的命名規則當推Microsoft公司的“匈牙利”法,該命名規則的主要思想是“在變數和函數名中加入首碼以增進人們對程式的理解”。例如所有的字元變數均以ch為首碼,若是指標變數則追加首碼p。如果一個變數由ppch開頭,則表明它是指向字元指標的指標。 “匈牙利”法最大的缺點是煩瑣,例如int i, j, k; float x, y, z;倘若採用“匈牙利”命名規則,則應當寫成int
Time of Update: 2017-02-27
第2章 程式的版式 版式雖然不會影響程式的功能,但會影響可讀性。程式的版式追求清晰、美觀,是程式風格的重要構成因素。 可以把程式的版式比喻為“書法”。好的“書法”可讓人對程式一目瞭然,看得興緻勃勃。差的程式“書法”如螃蟹爬行,讓人看得索然無味,更令維護者煩惱有加。請程式員們學習程式的“書法”,彌補大學電腦教育的漏洞,實在很有必要。 2.1 空行
Time of Update: 2017-02-27
序論我曾發表過檔案輸入輸出的文章,現在覺得有必要再寫一點。檔案 I/O 在C++中比烤蛋糕 簡單多了。 在這篇文章裡,我會詳細解釋ASCII和二進位檔案的輸入輸出的每個細節,值得 注意的是,所有這些都是用C++完成的。一、ASCII 輸出為了使用下面的方法, 你必須包含標頭檔<fstream.h>(譯者註:在標準C++中,已 經使用<fstream>取代<fstream.h>,所有的C++標準標頭檔都是無尾碼的。)。 這是 <iostream.h>
Time of Update: 2017-02-27
Visual C++6.0是開發Windows應用程式的強大工具,但是要通過它實現程式的列印功能, 一直是初學者的一個痛點,經常有朋友詢問如何在VC中實現列印功能,他們往往感到在MFC提 供的架構內實現這個問題很複雜,不知道如何下手。本例針對這個問題,介紹一種簡單的方 法實現文字串的列印功能,讀者朋友可以在此基礎上稍微改動一下,就可以實現檔案、映像的 列印功能。一、實現方法在Windows作業系統下,顯示器、印表機和繪圖器都 被視為輸出裝置,正常情況下,系統預設的輸出裝置是顯示器。要使用印表機,
Time of Update: 2017-02-27
在區域網路中,管理員常常需要將某條資訊發送給一組使用者。如果使用一對一的發送方法, 雖然是可行的,但是過於麻煩,也常會出現漏發、錯發。為了更有效解決這種組通訊問題 ,出現了一種多播技術(也常稱為組播通訊),它是基於IP層的通訊技術。為了協助讀者理 解,下面將簡要的介紹一下多播的概念。眾所周知,普通IP通訊是在一個寄件者和一 個接收者之間進行的,我們常把它稱為點對點的通訊,但對於有些應用,這種點對點的通訊 模式不能有效地滿足實際應用的需求。例如:一個數字電話會議系統由多個會場組成,當在
Time of Update: 2017-02-27
許多初學者都習慣用 char 型變數接收 getchar、getc,fgetc 等函數的返 回值,其實這麼做是不對的,並且隱含著足以致命的錯誤。getchar 等函數的返 回實值型別都是 int 型,當這些函數讀取出錯或者讀完檔案後,會返回 EOF.EOF 是一個宏,標準規定它的值必須是一個 int 型的負數常量。通常編譯器都會把 EOF 定義為 -1.問題就出在這裡,使用 char 型變數接收 getchar 等函數的返 回值會導致對 EOF 的辨認出錯,或者錯把好的資料誤認為是
Time of Update: 2017-02-27
首先要說的是,使用 malloc 函數,請包含 stdlib.h(C++ 中是 cstdlib) ,而不是 malloc.h .因為 malloc.h 從來沒有在 C 或者 C++ 標準中出現過! 因此並非所有編譯器都有 malloc.h 這個標頭檔。但是所有的 C 編譯器都應該 有 stdlib.h 這個標頭檔。在 C++ 中,強制轉換 malloc() 的傳回值 是必須的,否則不能通過編譯。但是在 C 中,這種強制轉換卻是多餘的,並且 不利於代碼維護。起初,C 沒有 void 指標,那時
Time of Update: 2017-02-27
1.為什麼 fflush(stdin)是錯的首先請看以下程式:include <stdio.h>int main( void ){int i;for ( ;;) {fputs("Please input an integer: ", stdout);scanf("%d", &i);printf("%d\n", i);}return 0; }這個程式首先會提示使用者輸入一個整數,然後等
Time of Update: 2017-02-27
11.1.3 const成員函數任何不會修改資料成員的函數都應該聲明為const類型。如果在編寫const成員函數時,不慎修改了資料成員,或者調用了其它非const成員函數,編譯器將指出錯誤,這無疑會提高程式的健壯性。以下程式中,類stack的成員函數GetCount僅用於計數,從邏輯上講GetCount應當為const函數。編譯器將指出GetCount函數中的錯誤。class Stack{public:void Push(int elem);int Pop(void);int
Time of Update: 2017-02-27
11.1 使用const提高函數的健壯性看到const關鍵字,C++程式員首先想到的可能是const常量。這可不是良好的條件反射。如果只知道用const定義常量,那麼相當於把火藥僅用於製作鞭炮。const更大的魅力是它可以修飾函數的參數、傳回值,甚至函數的定義體。 const是constant的縮寫,“恒定不變”的意思。被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。所以很多C++程式設計書籍建議:“Use const
Time of Update: 2017-02-27
10.2 組合l 【規則10-2-1】若在邏輯上A是B的“一部分”(a part of),則不允許B從A派生,而是要用A和其它東西組合出B。例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是頭(Head)的一部分,所以類Head應該由類Eye、Nose、Mouth、Ear組合而成,不是派生而成。如樣本10-2-1所示。class Eye{public:void Look(void); };class Nose{public:void Smell(void)