编程封装
㈠ VC++ 程序 如何封装为dll文件
创建新的动态链接库 (DLL) 项目
从 “文件”菜单中,选择 “新建”,然后选择 “项目…”。
在 “项目类型”窗格中,选择 “Visual C++”下的 “Win32”。
在 “模板”窗格中,选择 “Win32 控制台应用程序”。
为项目选择一个名称,如
MathFuncsDll,并将其键入 “名称”字段。 为解决方案选择一个名称,如
DynamicLibrary,并将其键入 “解决方案名称”字段。
单击 “确定”启动 Win32 应用程序向导。
在 “Win32 应用程序向导”对话框的 “概述”页中,单击 “下一步”。
在 “Win32 应用程序向导”中的 “应用程序设置”页中,选择 “应用程序类型”下的 “DLL”(如果可用),或者选择 “控制台应用程序”(如果 “DLL”不可用)。 某些版本的 Visual Studio
不支持通过使用向导创建 DLL 项目。您可以稍后对此进行更改,以将项目编译为
DLL。
在 “Win32 应用程序向导”的 “应用程序设置”页中,选择 “附加选项”下的 “空项目”。
单击 “完成”创建项目。
向动态链接库添加类
若要为新类创建头文件,请从 “项目”菜单中选择 “添加新项…”。
将显示 “添加新项”对话框。
在 “类别”窗格中,选择 “Visual C++”下的 “代码”。 在 “模板”窗格中选择 “头文件(.h)”。 为头文件选择一个名称,如
MathFuncsDll.h,并单击 “添加”。 将显示一个空白文件。
添加一个名为“MyMathFuncs”的简单类,以执行常见的算术运算,如加、减、乘和除。代码应与以下内容类似:
以带有颜色区分的格式查看复制到剪贴板打印
// MathFuncsDll.h
namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);
// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);
// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);
// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};
}
// MathFuncsDll.h
namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);
// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);
// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);
// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};
}
请注意此代码方法声明中的 __declspec(dllexport) 修饰符。 这些修饰符使 DLL
能够导出该方法以供其他应用程序使用。有关更多信息,请参见 dllexport, dllimport。
若要为新类创建源文件,请从 “项目”菜单中选择 “添加新项…”。
将显示 “添加新项”对话框。
在 “类别”窗格中,选择 “Visual C++”下的 “代码”。 在 “模板”窗格中,选择 “C++ 文件(.cpp)”。 为源文件选择一个名称,如
MathFuncsDll.cpp,并单击 “添加”。 将显示一个空白文件。
在源文件中实现“MyMathFuncs”的功能。代码应与以下内容类似:
以带有颜色区分的格式查看复制到剪贴板打印
// MathFuncsDll.cpp
// compile with: /EHsc /LD
#include "MathFuncsDll.h"
#include <stdexcept>
using namespace std;
namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}
double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}
double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}
double MyMathFuncs::Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}
return a / b;
}
}
// MathFuncsDll.cpp
// compile with: /EHsc /LD
#include "MathFuncsDll.h"
#include <stdexcept>
using namespace std;
namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}
double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}
double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}
double MyMathFuncs::Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}
return a / b;
}
}
若要将项目生成为 DLL,请从
“项目”菜单中选择
MathFuncsDll “属性...”。 在左窗格中,选择 “配置属性”下的 “常规”。
在右窗格中,将 “配置类型”更改为 “动态库(.dll)”。
单击 “确定”保存更改。
说明
如果您从命令行生成项目,请使用
/LD 编译器选项指定输出文件应为 DLL。
有关更多信息,请参见 /MD、/MT、/LD(使用运行库)。
编译该动态链接库,方法是选择
“生成”菜单中的 “生成解决方案”。
这样就创建了一个可供其他程序使用的
DLL。
㈡ 在Java面向对象的编程当中的为什么要封装什么叫封装
概念:所谓封装,就是通过定义类并且给类的属性和方法加上访问控制来抽象事物的本质特性.
这个意思:
封装就是定义一个类,然后给该类的 属性(成员变量) 和 方法 加上 访问控制修饰词(public,private,
protected,默认包访问权限),使得该类的属性和方法对于类外部来说,想可见的可见,不想可见的隐藏。
所以,通过封装这个手段,就抽象出来了事物的本质特性。
对上面进行进一步的解释:
什么叫抽象?比如拿 人类 来举例子,封装是一种手段,通过封装定义出来的这个类,和现实当中的人这个实体(对象),他们之间就是一种抽象,我们现实当中只存在一个一个的人(对象),人类只是一个概念性的东西,是我们人自己归纳总结出来的,我们知道人都长什么样,所以我们知道符合这个样子的就叫人,人的大脑总是习惯将事物分类,因此人类的概念就出现了,那么我们发现一个一个的人,都有眼睛鼻子嘴(属性),都能吃饭(方法),等等,这就是人这个事物的本质特性,然后我们得编程啊,人类的概念光在脑海中出现了还不行,还得体现到代码上,那么你想体现到代码上,也就是定义一个类,就要使用封装这个手段。
为什么要加上访问控制?
一是,有些东西是很关键很机密的,不想随便被使用,被改变,被访问。
二是,可能这个东西不是很关键机密,访问和改变也无所谓,但是,因为有些属性和方法,它们对于外部来说,是无关的没用的,但是对于我自己这个类来说,是必要的,因为可能在我自己这个类中要使用它们,这个时候,进行隐藏,不让外部看,好处就是,如果将这些不必要的内容也暴露给外部的话,那么在使用的时候,使用者会被迷惑,因为这个东西对他没用,但是又可以调用,访问,而且他又不知道又没有用,但是如果进行隐藏,不给外部查看,那么就很清晰了,因为这样一来,只要是对外暴露的属性方法,都是有用的,你想一下,JDK的类库里面的那些类,比如String类,对外暴露的属性和方法,哪个是无用的?这也是一种良好的编程习惯和规范。
说了这么多,其实我的理解也有限,面向对象思想又不局限于某种语言,楼主仔细体会一下吧,我说的可能也不全对,这只是我个人的一点理解。
刚才上网搜到了一句话,不是我说的,但我感觉说的也不错,可以仔细体会一下:
封装是人们对现实世界中解决问题时,为了进行简化问题,对研究的对象所采用的一种方法,一种信息屏蔽技术。
㈢ 编程中封装是什么意思
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。(采自Java面试题)