Почему мой объект не может получить доступ к собственной закрытой переменной-члену?[C ++] - PullRequest
3 голосов
/ 24 ноября 2010

У меня есть класс с именем class Car, экземпляр которого создан как объект Car car1. Одна из переменных-членов Car - Car::width, но когда я пытаюсь выполнить строку

cout << car1.width << endl;

из main() Мне сказали, что это невозможно, потому что Car::width является личным. Насколько я понимаю, частные члены могут получить доступ к объектам класса, к которому они принадлежат, но эта ситуация поставила меня в тупик. Как обстоят дела с тем, что частные члены обращаются к своим собственным объектам?

Ответы [ 6 ]

5 голосов
/ 24 ноября 2010

Закрытые члены доступны с помощью методов того же класса, к которому они принадлежат.

1 голос
/ 24 ноября 2010

Если функция доступа (в данном случае main) не является членом или friend вашего класса Car, то компилятор прав, говоря, что private member width запрещен вэтот контекст.

Если подумать, если кто-то, кто сможет создать Car, сможет получить доступ к его private членам, то конфиденциальность не будет иметь большого значения.Вы создаете конструктор public, чтобы разрешить создание объекта, но скрываете элементы данных созданного объекта от таких пользователей, чтобы правильно их инкапсулировать.Вы ограничиваете манипулирование внутренними элементами private класса тем, что разрешено легальным использованием public или protected членов класса.

1 голос
/ 24 ноября 2010

Car может получить доступ width. Но в вашем примере вы пытаются получить доступ к width. Это как раз и есть смысл private.

0 голосов
/ 24 ноября 2010
cout << car1.width

Это не car1 пытается добраться до width - это cout пытается добраться до width cout не является членом car1, так как width является приватным, он завершается неудачей.

0 голосов
/ 24 ноября 2010

Метод класса Car может получить доступ к члену width, но ваш код (тот, который выполняет cout) не может.

0 голосов
/ 24 ноября 2010

Доступ к нему можно получить из функции-члена, а не снаружи, как у вас здесь. Весь смысл закрытой переменной состоит в том, чтобы предотвратить именно то, что вы пытаетесь сделать, а именно запретить пользователям класса использовать переменную-член.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...