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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Builder Многоязычный интерфейс в C++ Builder http://www.cyberforum.ru/cpp-beginners/thread386397.html
Здравствуйте... Хочу написать программу, которая поддерживает выбор языков... Сделал кое что... с помощью форм... То есть когда выбираю один язык одно окно закрывается, другое открывается. Но при попытке закрыть окно формы 3(условно, имеется ввиду окно проргаммы на другом языке) среда программирования зависает... Знаю, многоязычность совсем по другому организовывается, но я новичок в...
C++ Всё таки хочу снести отсебятину на тему размерных величин 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. Потом придумаю, как лучше назвать параметры. { http://www.cyberforum.ru/cpp-beginners/thread386391.html
Составить частотный словарь вводимого текста C++
Составить частотный словарь вводимого текста (несколько строк) тоесть распечатать строку следующим образом: справа от каждого слова-частоту, с которой оно встретилось.
Исключения C++
Как бросить исключение выхода за границы массива? Как его поймать? Что делать после отбрасывания? TItem & TArray::operator (unsigned int index) { if {Index>NumberOfData} { //Что сдесь надо написать? } else {
C++ Классы. Доступ к созданному объекту. http://www.cyberforum.ru/cpp-beginners/thread386371.html
Доброе утро, форум.:friends: Имеется код, чисто для примера. файл book.h #ifndef BOOK_H #define BOOK_H struct Book {
C++ Для чего нужна функция errno_t err? Почему в Visual C++ 5.0 нужно вводить не FILE *fp; fp = fopen("File" , "w"); ,а FILE *fp; errno_t err; err = fopen_s(&fp, "File" , "w"); ? подробнее

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

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

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


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

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

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

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

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

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

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

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