2009年10月21日 星期三

C++ 簡易速查

Virtual Function
虛擬函數


虛擬函數會以關鍵字 virtual 為首宣告在基底類別。用途為供其衍生類別各自實作所需的同名成員函數。

ex.

class MyClassVF {
public:
virtual int myfunc ()
{ return 0; }
};


Pure Virtual Function
單純虛擬函數


為虛擬函數的一種,其宣告方式為 virtual return_type function_declaration (parameter) = 0;

ex.

class MyClassPVF {
public:
virtual int myfunc (void) = 0;
};


Abstract Class
抽象類別


含有虛擬函數宣告的類別即為抽象類別,所以上述面舉的兩個例子中的 MyClassVF、MyClassPVF 都是。

Boxing and Unboxing
裝箱、拆箱


Boxing 將實值類別轉換成 object 類別。
Unboxing 將 object 類別轉換成實值類別。
參考資料:http://msdn.microsoft.com/zh-tw/library/yz2be5wk.aspx

ex.

int i = 123; // a value type
object o = i; // boxing
int j = (int)o; // unboxing


Tracking Handles
追蹤處理


Tracking Handle 有點像是指標,其內容也是存一個位址。
宣告方式為 type^ variable_name;
不過和指標不一樣的是,他的位址是由垃圾回收者自動更新。
換句話說,手動調整 Tracking Handle 的位址是不被允許的。
還有,和指標一樣,在宣告 Tracking Handle 時,他是不指向任何位址的。
因此,任何的參考前都必須先作指定初始位址的動作。

ex.

String^ sentence;
sentence = nullptr; // set handle to null
sentence = "This is a sentence.";

int^ value = 0; // initialization
*value = 100;


L"...."

將 "..." 轉換為 unicode。

stdafx.h

參考文件:http://zhidao.baidu.com/question/3711602.html

Using Enumerators as Flags

一個很實用的技巧,不過只有在 C++/CLI 底下才能用。ANSI C++ 並不支援。
參考資料:Beginning Visual C++ 2008[Ivor Horton]

ex.

[Flags] enum class FlagBits{ Ready = 1, ReadMode = 2, WriteMode = 4, EOF = 8, Disabled = 16};
FlagBits status = FlagBits::Ready | FlagBits::ReadMode | FlagBits::EOF;
Console::WriteLine(L”Current status: {0}”, status);


output:
Current status: Ready, ReadMode, EOF

沒有留言:

張貼留言