导出DLL 隐藏私有成员变量和成员函数 工厂方法

原创 2015年11月17日 23:20:38

导出DLL一般用下面的代码
// A.h

#ifdef DLL_EXPORTS 
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

class DLL_API A
{
public:
    func1();
    int x;
private:
    func2();
    int y;
}

//A.cpp

#define DLL_EXPORTS
#include "A.h"

...类的实现

但通常可能我并不希望把 private 的 func2() 和 y变量暴露给dll的使用者。直接在提供给使用者的 .h 中删掉是不行的,因为当类的使用者定义一个A的对象时,其申请的空间会后它实际所需的空间不一致。
(好像还 可以只提供DLL而不提供.h和.lib文件,然后显示链接所需的函数)
初始想法是在提供给用户的 A_public.h中只有 class A_Base 的实现和A的声明或者 A的指针,然后用户可以 A_Base * ptr = new A();但这样还是要调用A()构造函数,所以还是要把A的实现给出来,不然不能编译。

解法是用 工厂方法(factory method)来解决,示例如下

// A_public.h

class DLL_API A_Base
{
public:
    virtual func1()=0;
    int x;
    vitual ~A_Base(); //需要有 虚析构函数
}
class DLL_API A_Factor
{
public:
    A_Base * get_A();
}

// A_private.h

#include "A_public.h"

class A:public A_Base
{
public:
    func1();
private:
    func2();
    int y;
}

// A.cpp

#include "A_private.h"
A_Base * A_Factor::get_A()
{
    return new A();
}
... 实现 A 的相关函数

用户使用:
// dll_user.cpp

#include "A_public.h"

A_Base * ptr = A_Factor.get_A();
ptr->func1();

C++类的私有成员变量和函数的隐藏

我们在写C++的代码的时候,尤其是给三方提供库的情况下,所提供的类头文件中包含了很多的私有的变量和函数,对于调用和开发的人来说都是很繁琐的一件事情,最近在写QT代码的时候发现对其私有的东西隐藏很好,仔...
  • wsl888444
  • wsl888444
  • 2013年11月22日 11:18
  • 5662

类静态成员变量的导出问题

在DLL编写时,使用__declspec(dllexport)的作用,它就是为了省掉在DEF文件中手工定义导出哪些函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函...
  • slshelly
  • slshelly
  • 2013年03月26日 10:24
  • 4597

Java子类继承(二):隐藏成员变量和方法重写的理解

1,上篇说子类可以继承父类的成员变量,作为自己的成员变量,在Java中子类也可以隐藏由父类继承来的成员变量,只要子类中声明的成员变量和父类的成员变量同名,就可以将其隐藏。 需要的注意是:子类对象可以...
  • tuke_tuke
  • tuke_tuke
  • 2015年07月18日 14:10
  • 2853

Python中定义“私有”成员变量和成员函数

Python中定义“私有”成员变量和成员函数 参考连接:http://docs.python.org/2/tutorial/classes.html    http://...
  • bluehawksky
  • bluehawksky
  • 2014年12月08日 21:41
  • 1555

Python中定义“私有”成员变量和成员函数

参考连接:http://docs.python.org/2/tutorial/classes.html    http://www.pythonclub.org/python-class/privat...
  • u012512762
  • u012512762
  • 2015年04月08日 10:47
  • 384

Python中定义“私有”成员变量和成员函数

参考连接:http://docs.python.org/2/tutorial/classes.html    http://www.pythonclub.org/python-class/privat...
  • robby_chan
  • robby_chan
  • 2014年09月04日 13:39
  • 531

Python中定义“私有”成员变量和成员函数

参考链接:http://blog.csdn.net/bluehawksky/article/details/41810027 在学习Python的过程中发下,它把类(class)中所有的成员函数...
  • star714
  • star714
  • 2017年04月15日 08:24
  • 295

C++类的私有成员变量和函数的隐藏

我们在写C++的代码的时候,尤其是给三方提供库的情况下,所提供的类头文件中包含了很多的私有的变量和函数,对于调用和开发的人来说都是很繁琐的一件事情,最近在写QT代码的时候发现对其私有的东西隐藏很好,仔...
  • wsl888444
  • wsl888444
  • 2013年11月22日 11:18
  • 5662

QT类的私有成员变量和函数的隐藏

转载自 http://blog.csdn.net/wsl888444/article/details/16880091 我们在写C++的代码的时候,尤其是给三方提供库的情况下,所提供的类头文件中包含...
  • ljt350740378
  • ljt350740378
  • 2016年01月18日 20:56
  • 1542

C++类中的静态成员变量和静态成员函数的作用

  • 2011年09月09日 16:02
  • 121KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:导出DLL 隐藏私有成员变量和成员函数 工厂方法
举报原因:
原因补充:

(最多只允许输入30个字)