c 36 物件動態建立

2021-06-27 07:37:20 字數 1932 閱讀 2536

shape.h

#ifndef _shape_h_

#define _shape_h_

class shape;};

class circle:public shape

; class square:public shape

; class rectangle :public shape

;#endif

dynbase.h

#ifndef _dyn_base_h_

#define _dyn_base_h_

#include #include #include using namespace std;

typedef void* (*create_func)();//定義函式指標

class dynobjectfactory

else

}static void register(const string& name,create_func func)

private:

static mapmapcls_;//建立的方法儲存在map 容器當中了。

};_declspec(selectany) mapdynobjectfactory::mapcls_;

class register

};//巨集的定義

#define register_class(class_name)\

class class_name##register\

private:\

static register reg_;\

};\ register class_name##register::reg_(#class_name,class_name##register::newinstance);

#endif

cpp main

//動態建立物件 對原有的類不做任何改變,只需要增加乙個巨集就能夠實現動態建立

#include "shape.h"

#include #include #include #include "dynbase.h"

using namespace std;

void drawallshape(const vector& v)

} void deleteallshape(const vector& v) }

int main(void)

shape.cpp

#include "shape.h"

#include #include "dynbase.h"

using namespace std;

void circle:: draw()

{ cout<<"circle::draw.."<

部分語言摘抄:

也即定義了乙個新類,且由於含有static 成員,則在main函式執行前先執行初始化,呼叫register類建構函式,在建構函式中呼叫

dynobjectfactory::register(name, func); 即呼叫dynobjectfactory 類的靜態成員函式,在register函式中通過map容器完成了

字串與函式指標配對的註冊,如mapcls_[name] = func;

進入main函式,呼叫dynobjectfactory::createobject("circle") ,createobject函式中通過string找到對應的函式指標

(newinstance),並且呼叫後返回建立的物件指標,需要注意的是 return it->second(); 中it->second 是函式指標,後面加括

號表示呼叫這個函式。對巨集定義中的#,##用法不熟悉的可以參考這裡。

這樣當需要建立多個不同類物件的時候,就不再需要寫很多ifelse的判斷了。

C 入門(7) 物件

類 屬性 方法 類名的第乙個字母一般採用大寫,類宣告的末尾必須加上分號 c 允許在類裡宣告常量,但不允許對它賦值,除非建立乙個靜態常量。構造器 1 構造器的名字和它所在類的名字一樣 2 系統會在建立出某個新例項之後,立刻自動呼叫這個類的構造器 3 構造器永遠不返回任何值。如果沒有在類裡定義乙個構造器...

3 5物件陣列 C

1.簡介 物件陣列和普通陣列沒有本質的區別,只不過普通陣列的元素是簡單變數,而物件陣列的元素是物件而已。物件陣列在實際中的主要應用在系統需要乙個類的多個物件的情況。例如需要建立100學生檔案,每個檔案包括姓名,性別,年齡等內容。例如下面 student students 宣告了100個學生陣列,系統...

9 物件建立過程和多型

5.多型 重重之重 難點 4.物件建立的過程 了解 4.1單個物件建立的過程 成員變數 新的值 由結果可知優先順序如下 初始化方式 構造塊 構造方法 由結果可知優先順序如下 靜態 塊 構造塊 構造方法 4.2子類物件建立的過程 1 main 方法時程式的入口,當建立物件時會在堆區申請一塊儲存區域 2...