头文件封装

Encapsulation in header files

本文关键字:封装 文件      更新时间:2023-10-16

我有一个头文件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;
}

,甚至可以看到它的静态成员

好吧,不要让他们公开。将它们设置为protectedprivate,并授予friend访问B类的权限。