原创 《Thinking in C++, 2nd Edition》筆記-第五章(Hiding the Implementation)

C++的存取控制 public:在其後聲明的所有成員對所有的人都可以存取 private:除了該類型的創建者和類的內部成員函數之外,任何人都不能存取這些成員。 protected: protected與private基本相似,只有一點不同

原创 《Thinking in C++, 2nd Edition》筆記-第十一章(References & the Copy-Constructor)

C++中的指針 C++是一種更強類型的語言,比如void*,C中不允許一種類型指針賦值給另一種類型指針,但是可以通過void*來實現: bird* b; rock* r; void* v; v = r; b = v;而在C++中

原创 《Thinking in C++, 2nd Edition》筆記-第九章(Inline Functions)

在C中,宏可以用來提高效率,宏的實現是用預處理器而不是編譯器。預處理器直接用宏代碼代替調用,所以就沒有了參數壓棧、生成彙編語言的CALL、返回參數、執行彙編語言的RETURN的時間花費。所有的工作由預處理器完成,因此,不用花費什麼就具有了

原创 《Thinking in C++, 2nd Edition》筆記-第十八章(Exception handling)

C語言中,出錯信息通常通過函數的返回值來獲得,或者通過設置全局的錯誤判斷標誌(標準C語言中的errno()和perror()),對每個函數的返回值進行錯誤檢查會使程序變得繁瑣,程序設計者可能簡單的忽略這些出錯信息。而C++的異常處理, 1

原创 PE文件格式

1 PE文件結構 2 文件頭 PE 文件頭是一個 IMAGE_NT_HEADERS 類型的結構,它在WINNT.H文件中定義。 typedef struct _IMAGE_NT_HEADERS { DWORD Signatur

原创 《Thinking in C++, 2nd Edition》筆記-第七章(Function Overloading & Default Arguments)

爲什麼需要函數重載。 大多數編程語言要求我們爲每個函數設定一個唯一的標識符。如果我們想打印三種不同類型的數據:整型、字符型和實型,我們通常不得不用三個不同的函數名,如print _ int( )、print _ char( )和print

原创 《Thinking in C++, 2nd Edition》筆記-第八章(Constants)

值替換 const的最初動機是消除使用預處理器#define對常量的替換。#define只是對文本進行替換並且沒有類型檢查,因此會產生一個隱藏的問題,而這些用const可以避免。 例如:const int bufsize = 100;

原创 XAML初學

整理自某下載的PPT《XAML基礎教程》 1 XML與XAML 1.XML指可擴展標記語言(EXtensible Markup Language) XML 是一種標記語言,很類似HTML標記語言 XML 的設計宗旨是傳輸數據,而非顯示數據

原创 《Thinking in C++, 2nd Edition》筆記-第十五章(Polymophism & Virtual Functions)

函數調用綁定 如果一個子類指針向上轉型爲基類指針,然後用這個基類指針調用某個函數,那麼調用的將會是基類版本的函數,但是其實它是一個子類類型,理應調用子類版本的函數應該更合理。這是因爲編譯器在只有一個基類指針的時候並不知道調用正確的函數,它

原创 《Thinking in C++, 2nd Edition》筆記-第十章(Name Control)

static關鍵字有時控制存儲分配,而有時控制一個名字的可見性和連接。它的含義因此經常是相互衝突的: (1)在靜態數據區上創建對象,而不是每次函數調用時在堆棧上產生。這也是靜態存儲的概念。 如果想在兩次函數調用之間保留一個變量的值,我們可

原创 《Thinking in C++, 2nd Edition》筆記-第六章(Initialization & clean up)

在C++中,初始化和清理的概念是簡化類庫使用的關鍵,並可以減少那些由於用戶忘記這些操作而引起的許多細微錯誤。 用構造函數保證初始化,析構函數保證清除 如果一個類有構造函數,編譯器在創建對象時就自動調用這一函數。對用戶來說,是否調用構造函數

原创 初識Java—Java的特點

簡單的 1、風格類似於C++,因此C++程序員容易掌握Java。 2、拋棄了C++中容易引發錯誤的特性,比如指針、結構、枚舉以及內存管理等。 3、提供了豐富的類庫,方便開發使用。 面對對象的 Java是完全面向對象的,它支持繼承、重載、

原创 《Thinking in C++, 2nd Edition》筆記-第十九章(Run-time type identification)

只有一個基類指針或引用的時候,可以通過運行時類型識別(RTTI)來確定這個對象的準確類型。 在C++中加入異常處理功能時,它的實現要求在虛函數表中加入一些運行時類型信息。RTTI與異常一樣,依賴於虛函數表中的類型信息,因此,沒有虛函數表的

原创 《Thinking in C++, 2nd Edition》筆記-第十二章(Operator Overloading)

運算符重載只是一種“語法修飾”,本質上也是函數,只不過它的參數不出現在括號之內,而是出現在運算符附近。因此除非重載運算符使程序變得易寫,尤其是更易讀,否則就不必去重載運算符。比如說,不能像重載 1<<4;使其有別意義,或者使1.414<<

原创 《Thinking in C++, 2nd Edition》筆記-第十六章(Introduction to Templates)

模板的引入 繼承和組合提供了重用對象代碼的方法,而模塊提供重用源代碼的方法。 一個容器是可以容納其它對象的對象。它允許向它存儲對象,而後可以取出使用的高速、智能的暫存存儲器。容器類是解決不同類型的代碼重用問題的另一種方法。 #includ