Чтобы получить доступ к закрытому члену класса, вы можете:
- Предоставление открытых методов для чтения и записи значения закрытых членов.Таким образом, класс может получить полный контроль над операциями доступа.
- Предоставление открытых методов для возврата указателей или ссылок закрытых членов.Это не очень хороший способ, так как состояние объекта может быть разрушено.
- Дефектные классы или функции как друзья класса, который содержит приватный член, так что друзья могут получить доступ ко всем членам.Убедитесь, что друзья корректно работают с элементом данных класса.
Приватный, защищенный и общедоступный вступают в силу только во время компиляции, предотвращая ошибочные коды, разрушающие состояние объекта.У них нет никакого дела для контроля безопасности во время выполнения.
Давайте рассмотрим пример, см. Простой класс стека ниже:
class statck
{
private:
static const int buffersize = 100;
int buffer[buffersize];
int count;
public:
stack();
bool Push(int value);
bool Pop(int value);
int GetCount();
}
Счетчик логически представляет, сколько значений было помещено в стек, его значение управляется Push, Pop и конструктором, и не должно изменяться кодом с использованием объекта класса стека, например:
statck s;
s.count = 10;
Потенциал кода не имеет смысла.Если счетчик общедоступен, код может быть скомпилирован, и ошибку было сложнее выявить, и, объявив счетчик как частный, ошибка становится очевидной и вызывает ошибку компиляции.
Все модификаторы доступа к вещам (открытые«Защищенный и закрытый») сделано для того, чтобы сообщить компилятору, какой член класса может появиться в некоторых выражениях в коде, отличном от метода члена класса.Я не использовал фразу «доступ», думаю, это вас смутило.
Модификаторы доступа не влияют на компоновку памяти, создаваемую компилятором для представления объекта.Строго говоря, компоновка зависит от размера слова компилятора и платформы, но, как правило, в 32-битной системе объект statck будет состоять из 404-байтового блока памяти, 400-байтового для буфера и 4-байтового для подсчета, независимо от того, открыт ли буфер и счетчик или нет.или частный.И когда программа работает, каждый код, который получает адрес 404-байтового блока памяти, может читать и записывать их, приватный не имеет к этому никакого отношения.