今天看到呼叫的庫定位到的標頭檔案都是純虛函式,覺得挺有意思,也挺實用的,就寫了個小demo記錄下
1、建立新dll工程(demo是用win32控制台應用程式)
2、新建純虛函式標頭檔案(virtualbase.h)
#pragma once
#define dll_exports
#ifdef dll_exports
#define dll_api __declspec(dllexport)
#else
#define dll_api __declspec(dllimport)
#endif
class dll_api cvirtualbase
;extern "c" dll_api cvirtualbase *createobj(); //建立物件
extern "c" dll_api void destroyobj(cvirtualbase* obj); //銷毀物件
3、建立乙個類繼承上面的cvirtualbase並實現響應的函式(class1)
類.h:
#pragma once
#include "virtualbase.h"
class cclass1 : public cvirtualbase
;
.cpp:
#include "stdafx.h"
#include "class1.h"
cclass1::cclass1()
cclass1::~cclass1()
bool cclass1::init()
bool cclass1::uninit()
void cclass1::setnum(int a, int b)
int cclass1::operate()
dll_api cvirtualbase *createobj()
dll_api void destroyobj(cvirtualbase* obj)
工程很簡單,只是簡單做測試,編譯通過後生成vitual_dll.dll,vitual_dll.lib就可以呼叫了。
4、建立呼叫工程usevirtualdll(win32控制台),將virtualbase.h,vitual_dll.lib打包放在工程目錄下,像呼叫其他庫一樣配置即可,下面是呼叫的程式及結果
另:當多個類同時繼承cvirtualbase時,用起來也比較方便,將createobj()改為createobj(int type),及加入型別即可,如下段**
dll_api cvirtualbase *createobj(int type)
return pbase;
}
**都貼出來了,工程就像上面一樣簡單,就不上傳了,自己動手便知。 虛函式 純虛函式
一 定義.純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函式的方法是在函式原型後加 0 virtual void funtion1 0 二 引入原因 1 為了方便使用多型特性,我們常常需要在基類中定義虛函式。2 在很多情況下,基類本身生成...
虛函式 純虛函式
虛函式的作用是允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標引用來訪問基類和派生類中的同名函式。include using namespace std class student student類成員函式的實現 宣告抽象基類shape class shape virtual float...
虛函式和純虛函式
除了繼承外,c 的另乙個優良特性是支援多型,即允許將派生類的物件當作基類的物件使用。如果a是基類,b和c是a的派生類,多態函式test的引數是a的指標。那麼test函式可以引用a b c的物件。示例程式如下 class a void test a a class b public a class c...