2010年8月30日 星期一

繼承與物件建構、解構注意事項

繼承時有幾點重要的注意事項,例如建構、解構的順序、方式、動態記憶體配置等都是需要注意的地方。

pure virtual function 與 abstract base class

有些時後會發生一種情況,我們必須創立許多類似的類別,而這些類別必須有某些相同且必要的條件,同樣以遊戲為例,例如資深工程師制訂了 NPC 的規格,各工程師照著規格實作遊戲企劃人員構想的各種 NPC 這種情況可以用到 virtual function 來解決各衍生類別的同名異式,但無法要求衍生類別一定要實作某些類別的內容,這時可以利用 "pure virtual function(純虛擬函式)" 例如:

2010年8月25日 星期三

polymorphic 與 virtual關鍵字

物件導向設計中有一項精華就是 polymorphic(同名異式),以 MFC 為例,每個元件其實最底層都是 CWnd (視窗),CButton 與 CEdit都繼承了 CWnd,兩都也都有 SetWindowText(),但 CButton 會顯示在按鍵的中間,CEdit 會顯示在框框中,這就是 polymorphic 的表現。

2010年8月20日 星期五

類別的靜態成員與自建簡易函式庫

有時後我們常常會寫一些 function,這些 function 在寫不同專案時常常要 copy 過去,若這些 function 與流程無關,或是可以把相關的值提取出來做為參數,那何不設計成一個自己使用的程式庫類別咧,

Class Default Constructor

假設有個類別T


class T
{
};
main()
{
  T tObj;
  T *tObj = new T;
  T tObj = T();
}

template 樣板函式

若我們要寫一個交換兩個值的 function,可能吃整數、浮點數、字串、該怎麼辦呢?最簡單的方法就是用 overloading 寫好幾個,另一種方法就是寫樣板函式請前置處理器幫忙。

Inline function、Marco

function 這種東西很好用,但呼叫 function 時都是有成本的,例如

不定參數的 function 宣告方法

有時我們要做一些動作,參數是不固定的,例如取一堆整數的最大值

function 的陣列參數

C++ 設計 function 時,若參數有陣列一般是這樣宣告的,

enum 的用途

enum 可以用來定義常數,翻譯作 "列舉"

structure 的眉角

從某些方面來看,struct 與class 真的很像,以下是宣告方式

Escape Sequence Codes

一些常用的 Escape Control

2010年8月19日 星期四

operator overloading

operator 即是運算子,在利用 C++ 編寫程式時,operator overloading 是很常用到的,例如果我們自己實作了一個類別,一個漂亮的 ComboBox,我們可以在這個 CComboBox 中加入一條函式

const 與 volatile 修飾字

const 即是常數,即是宣當時賦值後只能讀取,無法改寫的數,很多初學者只知道這可以宣告無法改變的變數,但又莫名奇妙不知道實質的意義,不要改變這種事不就自己知道就好了嗎?為什麼要刻意在前面加上 const 來修飾呢?小的之前的想法就是這樣,讀的書多了才發現真正的用處在哪。

2010年8月18日 星期三

CString.ReverseFind() 與 Find() 的區別

CString 類別中有一些好用的 Method,有一個名為 Find() 的 Method 即是其中一個,此函式會回傳找到參數的索引位置,索引以 0 開始計算,若沒找到就會回傳 -1

利用 Event 定時處理某些事情

在軟體流程中,常常需要在固定一段時間後去做某件事,例如股市看盤軟體,每1分鐘要更新一次走勢圖,包括交易量、成交金額等資訊,初心者經常會使用 SetTimer() 來做這種事,但 SetTimer 這種事只存在於視窗中,例如 CWnd、CDialog 等等視窗。

2010年8月17日 星期二

Thread 常用的同步方式

有時後我們會使用 Thread 來在背景做一些事,僅僅是為了不讓畫面被 main thread 卡住,若我們需要等待 thread 做完事才處理接下來的動作,可以使用以下 Windows API

Multi Thread 下的 function 設計條件

在開發 Multi Thread 的軟體時,所有可能被 Thread 呼叫的 function 都要盡量設計成 Reentrant,這可以提供最安全的執行環境與結果。

Singleton 的 C++ 範例

Singleton 翻譯作 "獨身" 對於取代全域物件,Singleton 是個安全又方便的方法。

Multi Thread 的小範例

經常會寫到 Multi Thread 的程式,卻常常要回頭翻以前寫的 Code 查語法,大概是不夠熟吧,所以這裡也筆記一下。

專案轉換常發生的 qedit.h 編譯問題

有時新的 IDE 工具上市時,為了配合某些流程,必須將舊的開發環境轉至新的開發環境,又或網路上下載了 VS2003 的範例,苦於自己只有 VS2005 而必須轉換,這種狀況就常常遇到一些前置處理器與編譯的惱人錯誤…

使用 DXSDK 發生的 __ptr64 編譯問題

有時後編譯 DirectShow Sample 中的 BaseClasses 時會出現__ptr64相關的錯誤訊息,使用此 Project 有兩種方式,第一是直接 Include 完整的 Sample 目錄,例如 C:\DXSDK\Samples\C++\DirectShow\BaseClasses

2010年8月16日 星期一

最佳化對 Singleton 的影響

取代全域物件,使用 Singleton 是個不錯的觀念,但在 Singleton 的類別經常伴隨著一個 member function 叫作

Multi Thread 常用的安全控制

Thread 有至少 3 種狀態供我們利用,分別為
1. Running - 正在佔用CPU執行中
2. Ready - 可立即執行的狀態,但CPU仍被佔用
3. Waiting - 等待事件

2010年8月15日 星期日

學習中…

只是拿來做一些個人筆記…好讓自己在各處都可以查到曾經整理過的資料…若您正好需要這裡的某些資料…註明出處後就直接取走吧…

筆記內容大部份都是關於寫作客戶端程式的一些經驗或其他地方看到的知識…內容不一定是完全正確的…而是我所理解的認知…若發現有誤請您指教…小的會非常感激…