将课程公开和公开其内容之间有很大的区别。
如果您在包含文件(.h 文件)中定义您的类,那么您就是在公开您的类。包含此包含文件的所有其他源文件都将了解此类,并且可以例如有一个指向它的指针。
将类设为私有的唯一方法是将其定义放在源 (.cpp) 文件中。
即使您公开了课程,也不一定必须公开课程的内容。下面的例子是一个极端的例子:
class MyClass
{
private:
MyClass();
~MyClass();
void setValue(int i);
int getValue() const;
};
如果这个定义放在一个包含文件中,所有其他源都可以引用(有一个指向)这个类,但是由于类中的所有方法都是私有的,没有其他源可以构造它、破坏它、设置它它的价值或得到它的价值。
您可以通过将类中的方法放入类定义的“公共”部分来公开类的内容,如下所示:
class MyClass
{
public:
MyClass();
~MyClass();
int getValue() const;
private:
void setValue(int i);
};
现在每个人都可以构造和销毁这个类的实例,甚至可以获取值。但是,设置值不是公开的,因此没有人能够设置值(类本身除外)。
如果你想让这个类只对你的应用程序的某个其他类公开,而不是对整个应用程序,你应该声明其他类为朋友,例如:
class SomeOtherClass;
class MyClass
{
friend SomeOtherClass;
public:
MyClass();
~MyClass();
int getValue() const;
private:
void setValue(int i);
};
现在,SomeOtherClass 可以访问 MyClass 中的所有私有方法,因此它可能会调用 setValue 来设置 MyClass 的值。所有其他类仍然仅限于公共方法。
不幸的是,在 C++ 中没有办法只将你的类的一部分公开给有限的一组其他类。所以,如果你让另一个类成为朋友,它就可以访问所有私有方法。因此,限制朋友的数量。