使用C++将类公开给其他类

Sim*_*ity 9 c++ public

如果我有两个类,例如如下:

class A {...}

class B {...}
Run Code Online (Sandbox Code Playgroud)

如果我想让班级A公开上课B,我是否只是将班级成员A公之于众,或者我可以使用public class A {...}

有没有办法告诉班级B,例如,只有班级A是公开的?换句话说,我可以将公共课程设为A受保护的或私人的吗?或者,这只是派生一个类(继承)的问题?

谢谢.

Pat*_*ick 18

将课程公开并公开其内容之间存在重大差异.

如果您在包含文件(.h文件)中定义您的类,那么您将公开您的类.包含此包含文件的每个其他源文件都将了解此类,并且可以例如具有指向它的指针.

使类成为私有的唯一方法是将其定义放在源(.cpp)文件中.

即使您将课程公开,也不一定要公开课程内容.以下示例是一个极端的例子:

class MyClass
   {
   private:
      MyClass();
      ~MyClass();
      void setValue(int i);
      int getValue() const;
   };
Run Code Online (Sandbox Code Playgroud)

如果将此定义放在include文件中,则每个其他源都可以引用(具有指向)此类,但由于该类中的所有方法都是私有的,因此没有其他源可以构造它,破坏它,设置其值或得到它的价值.

通过将类中的方法放在类定义的"public"部分中,可以使类的内容成为公共内容,如下所示:

class MyClass
   {
   public:
      MyClass();
      ~MyClass();
      int getValue() const;
   private:
      void setValue(int i);
   };
Run Code Online (Sandbox Code Playgroud)

现在每个人都可以构造和破坏这个类的实例,甚至可以获得价值.但是,设置值不是公共的,因此没有人能够设置值(类本身除外).

如果您希望将类公开给您的应用程序的其他类,而不是完整的应用程序,则应该声明其他类是朋友,例如:

class SomeOtherClass;
class MyClass
   {
   friend SomeOtherClass;
   public:
      MyClass();
      ~MyClass();
      int getValue() const;
   private:
      void setValue(int i);
   };
Run Code Online (Sandbox Code Playgroud)

现在,SomeOtherClass可以从MyClass访问所有私有方法,因此它可以调用setValue来设置MyClass的值.所有其他类仍然限于公共方法.

不幸的是,在C++中,没有办法只将一部分类公开给一组有限的其他类.因此,如果您将另一个类设为朋友,则可以访问所有私有方法.因此,限制朋友的数量.