封装在头文件中

Encapsulation in header files

我有一个包含 2 个 classes 的头文件。 class A(这是一个非常大的 class)和继承 class A 的 class B。我不希望人们被允许创建 [=15 的对象=] A甚至可以看到它的静态成员。他们应该只与 class B 一起工作。最好的方法是什么。

(一般来说A是一个"helper class")

要限制 class 的创建,请将 class A 的构造函数设为私有并将 class B 声明为友元 class。这样只有B可以实例化A.

class B;
class A
{
private:
    A();
    friend class B;
};

这同样适用于方法(静态或非静态):将它们全部设为私有,friend 语句将允许 B 访问 A 的成员。

编辑:也适用于 protected。

I don't want people to be allowed to create objects of class A

您要找的是 "abstract base class"。在 C++ 中,任何具有至少一个抽象成员的 class 自动成为抽象 class,没有像其他语言那样的附加关键字。

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;
}

or even be able to see its static members

好吧,不要制造它们 public。让他们 protectedprivate 并授予 friend 访问您的 B class.