Форум программистов, компьютерный форум CyberForum.ru

Доступ к закрытым элементам класса - Вопрос - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Всё таки хочу снести отсебятину на тему размерных величин http://www.cyberforum.ru/cpp-beginners/thread386391.html
class TLenghtUnit { private: static TLenghtUnit *Base; double k1; double k2; TLenghtUnit *u; public: TLenghtUnit (TLenghtUnit &Unit, double k1, double k2) // Unit - ссылка на существующую величину. Декларация TLenghtUnit x(y, k1, k2) означает k1*x=k2*y. Потом придумаю, как лучше назвать параметры. {
C++ Составить частотный словарь вводимого текста Составить частотный словарь вводимого текста (несколько строк) тоесть распечатать строку следующим образом: справа от каждого слова-частоту, с которой оно встретилось. http://www.cyberforum.ru/cpp-beginners/thread386387.html
Исключения C++
Как бросить исключение выхода за границы массива? Как его поймать? Что делать после отбрасывания? TItem & TArray::operator (unsigned int index) { if {Index>NumberOfData} { //Что сдесь надо написать? } else {
Классы. Доступ к созданному объекту. C++
Доброе утро, форум.:friends: Имеется код, чисто для примера. файл book.h #ifndef BOOK_H #define BOOK_H struct Book {
C++ Для чего нужна функция errno_t err? http://www.cyberforum.ru/cpp-beginners/thread386365.html
Почему в Visual C++ 5.0 нужно вводить не FILE *fp; fp = fopen("File" , "w"); ,а FILE *fp; errno_t err; err = fopen_s(&fp, "File" , "w"); ?
C++ Работа со списками (через класс). Скажите, в чем ошибка. Доброго времени суток. Я написал программу, просмотрите, пожалуйста. В общем нужно реализовать класс, выполняющий следующие функции: 1. Добавление элемента в начало списка 2. Добавление элемента в конец списка 3. Включение элемента в середину списка, после элемента с определенным идентификатором 4. Удаление элемента по его идентификатору 5. Замена двух соседних элементов списка. 6.... подробнее

Показать сообщение отдельно
Bers
Заблокирован
18.11.2011, 10:25     Доступ к закрытым элементам класса - Вопрос
Вы просто не совсем понимаете, что такое "инкапсуляция".
Инкапсуляция - это сокрытие внутренностей объекта от всего внешнего мира.

Представьте себе, что объект - это периметр. Этакий забор. Внутри этого забора спрятаны все кишки. Снаружи не видно, что там внутри.

У этого периметра есть ворота (паблик-методы). Только через эти ворота можно что то отправить вовнутрь, или получить наружу.


Инкапсуляция касается только внешнего мира. Но если оказаться по другую сторону забора - внутри периметра, то вы увидите и все данные, и весь механизм внутренной реализации объекта.

Кто находится по ту сторону (внутри) забора? Сам объект и находится. Только сам объект знает свои данные, и как он устроен. И если объекты одного и того же класса, значит они знают об устройстве друг друга. Поэтому, инкапсуляция не распространяется на объекты одного класса.
Они "знают" точное устройство друг друга. Знают свою собственную природу. Знает её и тот разработчик, который эти классы создавал.

Не знают только внешний мир - пользователи. И их пользовательские коды.

Но сами объекты одного класса имеют одинаковую природу, и знают как они устроена.
Поэтому, они могут "видеть" устройство (приватные данные и методы) друг друга.
На самом деле они не "видят", они просто "знают" её.

Для всех остальных - только через ворота.

/зы не стоит злоупотреблять тем, что объекты одного класса могут напрямую обращаться к приватным данным друг друга. Даже в этом случае если есть возможность - лучше использовать хотя бы приватные, но методы. А если нет такой возможности - ничто не мешает создать метод в приватной зоне.

Добавлено через 2 минуты
блин... бессонная ночь сказывается. Сам прочел ток что написал - тавтология сплошная.

Но смысл вы вроде бы должны уловить...
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru