头文件封装
Encapsulation in header files
我有一个头文件2类。类A(这是一个非常大的类)和继承类A的类B。我不希望人们被允许创建类A的对象,甚至不能看到它的静态成员。他们应该只和b班一起学习,最好的方法是什么?
(一般来说A是一个"helper类")
要限制类的创建,将类A的构造函数设为private,并将类B声明为友类。这样,只有B可以实例化a。
class B;
class A
{
private:
A();
friend class B;
};
同样适用于方法(静态或非静态):使它们都是私有的,并且friend语句将允许B访问A的成员。
Edit:也适用于protected
我不希望人们被允许创建类A的对象
你正在寻找的被称为"抽象基类"。在c++中,任何具有至少一个抽象成员的类都自动成为抽象类,不像在其他语言中那样有额外的关键字。
class A
{
public:
virtual void Test() = 0; // abstract, has no implementation
};
class B : public A
{
public:
virtual void Test() {} // not abstract, has an implementation
};
int main()
{
A a; // this will produce a compiler error.
B b; // this is fine
return 0;
}
,甚至可以看到它的静态成员
好吧,不要让他们公开。将它们设置为protected
或private
,并授予friend
访问B类的权限。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 执行一个新的完全独立的进程,该进程封装在一个可执行文件中,而不需要为独立进程将文件写入磁盘
- 如何在 GUI 应用中封装控制台 exe 文件
- 将Node.js+Socket.io封装到OSX可执行文件中的可靠方法?(或C/C++/Objective-C库作为替代
- 创建一个封装其他2个项目的可执行文件
- 头文件封装
- 使用堆栈库解码/封装文本文件 - 无法C++对大文件进行编码