首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >头文件封装

头文件封装
EN

Stack Overflow用户
提问于 2016-08-31 07:43:13
回答 2查看 712关注 0票数 3

我有一个有两个类的头文件。A类(这是一个很大的类)和B类,它们继承了A类,我不希望人们被允许创建A类的对象,甚至不能看到它的静态成员。他们只应该和B班一起工作什么是最好的方法。

(一般来说,A是一个“帮助者类”)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-31 07:59:54

若要限制类的创建,请将类A的构造函数设为私有,并将类B声明为朋友类。这样只有B才能实例化A。

代码语言:javascript
复制
class B;
class A
{
private:
    A();
    friend class B;
};

这同样适用于方法(静态的或非静态的):使它们都是私有的,朋友语句将允许B访问A的成员。

编辑:也与保护一起工作。

票数 6
EN

Stack Overflow用户

发布于 2016-08-31 08:08:36

我不想让人们创建A类的对象

您要寻找的是所谓的“抽象基类”。在C++中,任何至少有一个抽象成员的类都自动是一个抽象类,没有其他语言中的额外关键字。

代码语言:javascript
复制
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;
}

甚至能够看到它的静态成员

别把他们公之于众。要么将它们设置为protectedprivate,然后将friend访问权限授予B类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39243587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档