Time of Update: 2017-02-27
對於普通類型的對象來說,它們之間的複製是很簡單的,例如:int a=100;int b=a;而類對象與普通對象不同,類對象內部結構一般較為複雜,存在各種成員變數。下面看一個類對象拷貝的簡單例子。#include <iostream>using namespace std;class CA{ public: CA(int b) { a=b; } void Show () { cout<<a<<endl; } private: int a;}
Time of Update: 2017-02-27
1.The C++ Programming Lanuage, by Bjarne Stroustrup, Speical 3rd edition,Addison Wesley這是C++創始人B教主之力作,描述C++語言之經典一書。這本書第三版是97年出的,B教主老人家給這本書開了個網頁http://www.research.att.com/~bs/3rd.html,2000年,又出了個Special 3rd edition,和97年的第三版相比,多了兩個Appendix,這兩章在網頁上可以下載,
Time of Update: 2017-02-27
隨著資料庫的廣泛應用,資料庫編程已經成為程式設計中發展迅猛的一支。C++
Time of Update: 2017-02-27
現在許多軟體把程式中需要的資料儲存在註冊表中,這樣當使用者裝的軟體越來越多時,致使註冊表越來越龐大,容易使系統出錯。當然,微軟也建議在註冊表中儲存資料,但當我們需要儲存的資料不多時完全可以把資料儲存在WIN.INI中,這樣可以很方便地維護,實現方法相對來說比較簡單。下面我以Borland C++ Builder為例來說說如何?。原理其實很簡單,只需調用API的 WriteProfileString和GetProfileInt函數就可以了。這兩個函數的原型是:BOOL
Time of Update: 2017-02-27
首先看一看視窗的MouseDown事件的聲明 void __fastcall TForm1::FormMouseDown(TObject *Sender,TMouseButton Button,TShiftState Shift,int X,int Y)其中的Shift參數被說明為TShiftState類型: enum Classes_1{ssShift,ssAlt,ssCtrl,ssRight,ssMiddle,ssDouble}; typedef
Time of Update: 2017-02-27
我們從一開始就一直在利用C++的輸入輸出在做著各種練習,輸入輸出是由iostream庫提供的,所以討論此標準庫是有必要的,它與C語言的stdio庫不同,它從一開始就是用多重繼承與虛擬繼承實現的物件導向的階層,作為一個c++的標準庫組件提供給程式員使用。iostream為內建類型類型對象提供了輸入輸出支援,同時也支援檔案的輸入輸出,類的設計者可以通過對iostream庫的擴充,來支援自訂類型的輸入輸出操作。為什麼說要擴充才能提供支援呢?我們來一個樣本。#include
Time of Update: 2017-02-27
自訂類的賦值運算子多載函數的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與解構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子多載函數,那麼系統將會自動提供一個賦值運算子多載函數。賦值運算子多載函數的定義與其它運算子多載函數的定義是差不多的。下面我們以執行個體說明如何使用它,代碼如下://程式作者:管寧//網站:www.cndev-lab.com//所有稿件均有著作權,如要轉載,請務必著名出處和作者#include
Time of Update: 2017-02-27
為什麼需要轉換運算子?大家知道對於內建類型的資料我們可以通過強制轉換符的使用來轉換資料,例如(int)2.1f;自訂類也是類型,那麼自訂類的對象在很多情況下也需要支援此操作,C++提供了轉換運算子多載函數,它使得自訂類對象的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下:operator 類名();轉換運算子的重載函數是沒有傳回型別的,它和類的建構函式,解構函式一樣是不遵循函數有傳回型別的規定的,他們都沒有傳回值。下面我看一個例子,看看它是如何工作的://例1//程式作者:管寧//網站:
Time of Update: 2017-02-27
現在我們已經解決了原始的書店問題了:我們必須讀取銷售記錄檔案並產生一個報告,顯示出每本書的總共收入、平均售價和銷售數量。練習24:編寫一個程式來讀取幾個事務記錄。對於每個新讀取的事務記錄,檢測它的ISBN是否與前面的相同,計算每個ISBN有多少個事務記錄。通過給出幾條事務記錄來測試這個程式。這些事務應該有多個ISBN,但是每個ISBN的記錄應該集合在一起。我們假設某個給定的ISBN的所有事務記錄是在一起出現的。我們的程式將把每個ISBN的資料群組合到Sales_item對象total中。我們從標
Time of Update: 2017-02-27
簡介本文將示範在基於Windows Vista的普通Windows應用程式及對話方塊程式中,如何利用C++來產生Aero毛半透明效果,此處使用的是Beta 2版本的Vista及Windows SDK,也許在後續的版本中,一些API在細節上會有所變化。另外,文中沒有使用MFC,全部例子用WTL 7.5產生,其可在http://wtl.sourceforge.net/下載得到,雖然此處使用的是Visual C++ 2003,但Visual C++
Time of Update: 2017-02-27
毫無疑問,異常規格是一個令人信服的特性。它使得代碼更容易理解,因為它明確地描述了一個函數可以拋出什麼樣的異常。但是它不只是一個有趣的注釋。編譯器在編譯時間有時能夠檢測到異常規格的不一致。而且如果一個函數拋出一個不在異常規格範圍裡的異常,系統在運行時能夠檢測出這個錯誤,然後一個特殊函數unexpected將被自動地調用。異常規格既可以做為一個指導性文檔同時也是異常使用的強制限制式機制,它好像有著很誘人的外表。不過在通常情況下,美貌只是一層皮,外表的美麗並不代表其內在的素質。函數unexpected
Time of Update: 2017-02-27
樹因為現實世界中存在這“樹”這種結構——族譜、等級制度、目錄分類等等,而為了研究這類問題,必須能夠將樹儲存,而如何儲存將取決於所需要的操作。這裡有個問題,是否允許存在空樹。有些書認為樹都是非空的,因為樹表示的是一種現實結構,而0不是自然數;我用過的教科書都是說可以有空樹,當然是為了和二叉樹統一。這個沒有什麼原則上的差別,反正就是一種習慣。二叉樹二叉樹可以說是人們假想的一個模型,因此,允許有空的二叉樹是無爭議的。二叉樹是有序的,左邊有一個孩子和右邊有
Time of Update: 2017-02-27
看過這樣一道題,問,“程式結構化設計的三種基礎結構,順序、選擇、迴圈是不是必須的?”當然,你知道這樣一個論斷,只要有這三種就足夠了;但是能不能更少呢?答案是“可以”,原因就是遞迴能取代迴圈的作用,例如下面的對一個數組裡面元素求和的函數:float rsum (float a[], const int n){if (n <= 0) return 0;else return rsum(a, n – 1) + a[n – 1
Time of Update: 2017-02-27
棧和隊列是操作受限的線性表,好像每本講資料結構的數都是這麼說的。有些書按照這個思路給出了定義和實現;但是很遺憾,本文沒有這樣做,所以,有些書中的做法是重複建設,這或許可以用不是一個人寫的這樣的理由來開脫。順序表示的棧和隊列,必須預先分配空間,並且空間大小受限,使用起來限制比較多。而且,由於限定存取位置,順序表示的隨機存取的優點就沒有了,所以,鏈式結構應該是首選。棧的定義和實現#ifndef Stack_H#define Stack_H#include
Time of Update: 2017-02-27
先說說什麼叫疏鬆陣列。你說,這個問題很簡單嗎,那你一定不知道中國學術界的嘴皮子仗,對一個字眼的“摳”將會導致兩種相反的結論。這是清華2000年的一道考研題:“表示一個有1000個頂點,1000條邊的有向圖的鄰接矩陣有多少個矩陣元素?是否疏鬆陣列?”如果你是個喜歡研究出題者心理活動的人,你可以看出這裡有兩個陷阱,就是讓明明會的人答錯,我不想說出是什麼,留給讀者思考。姑且不論清華給的標準答案是什麼,那年的參考書是嚴蔚敏的《資料結構(C語言版)》,書上對
Time of Update: 2017-02-27
原書這部分內容很多,至少相對於迴圈鏈表是很多。相信當你把單鏈表的指標域搞清楚後,這部分應該難不倒你。現在我的問題是,能不能從單鏈表派生出雙向鏈表?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office"
Time of Update: 2017-02-27
好的軟體能夠適應變化。它提供新的特性,適應到新的平台,滿足新的需求,處理新的輸入。新的函數將被加入到函數庫中,新的重載將發生,於是要注意那些含糊的函數調用行為的結果;新的類將會加入繼承層次,現在的衍生類別將會是以後的基類,並已為此作好準備;將會編製新的應用軟體,函數將在新的運行環境下被調用,它們應該被寫得在新平台上運行正確;程式的維護人員通常不是原來編寫它們的人,因此應該被設計得易於被別人理解、維護和擴充。這麼做的一種方法是:用C++語言自己來表達設計上的約束條件,而不是用注釋或文檔。例如,
Time of Update: 2017-02-27
我懷疑一些人在C++軟體開發人員身上進行秘密的巴甫洛夫實驗,否則為什麼當提到“效率”這個詞時,許多程式員都會流口水。(Scott Meyers真幽默
Time of Update: 2017-02-27
程式庫的設計就是一個折衷的過程。理想的程式庫應該是短小的、快速的、強大的、靈活的、可擴充的、直觀的、普遍適用的、具有良好的支援、沒有使用約束、沒有錯誤的。這也是不存在的。為尺寸和速度而進行最佳化的程式庫一般不能被移植。具有大量功能的的程式庫不會具有直觀性。沒有錯誤的程式庫在使用範圍上會有限制。真實的世界裡,你不能擁有每一件東西,總得有付出。不同的設計者給這些條件賦予了不同的優先順序。他們從而在設計中犧牲了不同的東西。因此一般兩個提供相同功能的程式庫卻有著完全不同的效能特徵。例如,考慮iostre
Time of Update: 2017-02-27
背景在我們用C/C++開發的過程中,總是有一個問題會給我們帶來苦惱。這個問題就是函數內和函數外代碼需要通過一塊記憶體來互動(比如,函數返回字串),這個問題困擾和很多開發人員。如果你的記憶體是在函數內棧上分配的,那麼這個記憶體會隨著函數的返回而被彈棧釋放,所以,你一定要返回一塊函數外部還有效記憶體。這是一個讓無數人困擾的問題。如果你一不小心,你就很有可能在這個上面犯錯誤。當然目前有很多解決方案,如果你熟悉一些標準庫的話,你可以看到許多各式各樣的解決方案。大體來說有下面幾種:1)在函數內部通過mal