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