C 特殊工具與技術

2021-06-28 18:10:12 字數 1568 閱讀 1368

1、allocator類:allocator類是c++的乙個模板,它提供型別化的記憶體分配以及物件的分配和撤銷。

item_base *pitem = new item_base();

allocatora;

a.allocate(100);

2、rtti:程式能夠使用基類的指標或引用來檢查這些指標或引用所指的物件的實際派生型別。

item_base *bp = new item_base();

bulk_item *dp2 = dynamic_cast(bp);

if(typeid(bulk_item) == typeid(*dp)) cout << "bulk_item 型別" << endl;

cout << typeid(*bp).name() << endl;

3、類成員的指標:可以定義乙個指標,使其指向類成員或成員函式,然後通過指標來訪問類的成員。這包括指向屬性成員的指標和指向成員函式的指標。

std::string item_base::* p = &item_base::isbn;

double(item_base::* pmf)(std::size_t) const = &item_base::net_price;

4、巢狀類:

在乙個類的內部定義另乙個類,我們稱之為巢狀類(nested class),或者巢狀型別。

5、union:「聯合」是一種特殊的類,也是一種構造型別的資料結構。在乙個「聯合」內可以定義多種不同的資料型別, 乙個被說明為該「聯合」型別的變數中,允許裝入該「聯合」所定義的任何一種資料,這些資料共享同一段記憶體,以達到節省空間的目的。

union tokenvalue;

union statemachine

statemachine(int n)

statemachine(char* s) };

enum state ;

int main()

6、區域性類:可以在函式體內部定義類,這樣的類稱為區域性類。乙個區域性類定義了乙個型別,該型別只在定義它的區域性作用域中可見。

double net_price(size_t n) const;

cat cat;

return n * price;}

7、位域:位域是指資訊在儲存時,並不需要占用乙個完整的位元組, 而只需佔幾個或乙個二進位制位。

class file ;

file myfile;

myfile.mode = write;

myfile.modified = 1;

8、volatile:

作為指令

關鍵字,確保本條指令不會因

編譯器的優化而省略,且要求每次直接讀值.乙個定義為volatile的

變數是說這變數可能會被意想不到地改變,這樣,

編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在

暫存器裡的備份。

9、extern "c":

extern "c"的作用是,告訴c++編譯器,下面的**按照c的方式進行編譯

extern "c" void show(char *);

c 特殊工具與技術

型別識別 typeid 用於返回表示式的型別 dynamic cast 用於將基類的指標或引用安全的轉換成派生類的指標或引用 base b1,b2 base是基類 derived是派生類 derived d dynamic cast b1 derived d dynamic cast b2 int ...

第18章 特殊工具與技術 4

18.1.6 類特定的new和delete 編譯器看到類型別的new或delete表示式的時候,它檢視該類是否有operator new或operator delete成員,如果類定義 或繼承 了自己的成員new和delete函式,則使用那些函式為物件分配和釋放記憶體 否則,呼叫這些函式的標準庫版本...

第18章 特殊工具與技術 5

18.2 執行時型別識別 通過執行時型別識別 rtti 程式能夠使用基類的指標或引用來檢索這些指標或引用所指物件的實際派生型別。通過下面兩個操作符提供rtti 1 typeid操作符,返回指標或引用所指物件的實際型別。2 dynamic cast操作符,將基類型別的指標或引用安全地轉換為派生型別的指...