首先我要吐槽一下多样化的接口概念。我们可以看到各种关于接口的定义。
一般化的接口:表示对外提供的方法,提供给外部调用。外部用户不需要知晓内部具体实现细节。接口是沟通外部跟内部的桥梁。
然而很多书上又说C++中没有接口的概念,但可以用抽象类来模拟这个东西。???
我想这里接口的概念应该是语言层面的,可以特指java里面的接口概念。所以我们来看看Java中是如何定义接口的。
Java中的接口:在Java中接口是一个抽象类型,是抽象方法的集合,通常用关键字interface声明。类可以继承接口,但接口不是类,它们属于不同的概念。接口中是方法的集合,不能包含成员变量,继承接口的类中需要实现接口中的方法。接口不能实例化对象,但可以用来声明一个变量并且与实现了该接口的类对象绑定。
这么看来,C++抽象类要模拟的接口不就是这个东西吗[/表情]
下面我们再看看C++创造者说过的话:
1987年,我在C++中加入了纯虚函数的概念,一个纯虚函数必须被其派生类重写。借助此概念,你可以在一个C++类中通过将其成员函数声明为纯虚函数的方法表明该类是一个纯接口类。从那以后,我就一直强调在C++中,有一种主要的使用类的方法就是让该类不包含任何状态,而仅仅作为一个接口。从C++的角度来看,一个抽象类和一个接口之间没有任何区别。有时,我们习惯使用“纯抽象类”这个词来表示某个类仅仅只含有纯虚函数(不包含任何数据成员),它是抽象类的最常见的形式。
Ok,我认为前几篇文章中讲过的dll导出函数是符合一般化接口定义的,下面将要讲的是抽象类作为接口使用dll库中实现的方法,一般该类只具有成员函数,不具有数据成员(实际上抽象类中可以包含数据成员)。
生成Dll文件
1、新建dll项目
文件->新建->项目->Visual C++ win32控制台程序(填写项目名NewDll)->下一步->(应用程序类型)勾选:DLL,(附加选项)勾选:空项目->完成
2、添加新建项VirtualMath.h(公共头文件,后面还会用到)
#pragma once
#