Существует существенная разница между тем, чтобы сделать класс общедоступным и сделать его содержимое общедоступным.
Если вы определили свой класс во включаемом файле (.h файл), то вы сделаете свой класс общедоступным.Любой другой исходный файл, который включает этот включаемый файл, будет знать об этом классе и, например, может иметь указатель на него.
Единственный способ сделать класс закрытым, это поместить его определение в источник (.cpp) file.
Даже если вы делаете класс общедоступным, вам не обязательно делать содержимое вашего класса общедоступным.Следующий пример является крайним:
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 ++ нет способа сделать общедоступной только часть вашего класса для ограниченного набора других классов.Итак, если вы сделаете другой класс другом, он сможет получить доступ ко всем закрытым методам.Поэтому ограничьте количество друзей.