Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> private-часть в декларации класса, Как можно скрыть от пользователя класса? 
:(
    Опции темы
EvilsInterrupt
Дата 18.1.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Всем известно, что h/hpp это интерфейсные файлы, содержащие ровно столько, сколько должен знать о ней пользователь библиотеки для ее использования.

Вроде не приложная истина,  однако при написании класса, я не могу разделить декларацию класса ! Т.е. public в инклуде, а protected и private в реализации, т.е. в cpp-файле.

Раз нельзя, значит приходится с этим мириться или искать другие способы преодоления этого ограничения, чем я и занялся. Пояснив одному из знатоков у себя на работе услышал страшное слово "pimpl", как понял это необходимо создать класс дополнительный указать его в закрытых частях, а реализацию в конструкторе, т.е. new и в деструкторе delete и др. Но такая ситуция характерна для случаев только при кросс-платформенных проектов, когда хочется все сделать в едином стиле, а конкретику свести к некоторым классам. Мне кажется, пока не могу четко сформулировать почему, эта идиома не совсем подходит, но тогда

что вообще можно применить ?
PM MAIL WWW ICQ Jabber   Вверх
Lycifer
Дата 18.1.2009, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



Реализация класс это работа творческая, но посути ты имееш право открыть только паблик а то что не хочеш открывать делай реализацию  cpp(с) файле. ТО и есть делай через несколько классов.

P.S. Приватные поля это условное соображение , так как мы всегда можем получить память объекта. Ну а если все таки хочется закрыть, то тогда стоит делать какое ни будь связывание во время выполнения. 
Пример?

//закрытый класс, о котором не знает пользователь /.h
class A 
{
public:
void     PrintHelloWord();
};
//.h lkz gjkmpjdfntkz
class B
{
private:
 A* Get();
public:
      void PrintHelloWord();
};

//.cpp
void A::PrintHelloWord()
{
    std::cout<<"Hello Word"<<std::endl;
}
//.cpp
A* ptr = new A;
A* B::Get()
{
   return ptr;
}
void B::PrintHelloWord()
{
ptr->PrintHelloWord();
}


Это не идеальный код(напротив дажет, просто не хотелось заморачиваться), но зато думаю понятна суть!



PM MAIL ICQ   Вверх
mes
Дата 18.1.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(EvilsInterrupt @  18.1.2009,  14:27 Найти цитируемый пост)
Всем известно, что h/hpp это интерфейсные файлы, содержащие ровно столько, сколько должен знать о ней пользователь библиотеки для ее использования.

Вроде не приложная истина,  однако при написании класса, я не могу разделить декларацию класса ! Т.е. public в инклуде, а protected и private в реализации, т.е. в cpp-файле.


секции нужны не для (визуального) сокрытия кода, а для контроля (компилятором)  доступа. 

Цитата(EvilsInterrupt @  18.1.2009,  14:27 Найти цитируемый пост)
Но такая ситуция характерна для случаев только при кросс-платформенных проектов, когда хочется все сделать в едином стиле, а конкретику свести к некоторым классам

нет, просто на примере крос. проектов хорошо демонстрируются преимущества.

Цитата(EvilsInterrupt @  18.1.2009,  14:27 Найти цитируемый пост)

что вообще можно применить ? 

и эту идеому (см паттерн bridge, частным случаем которй является pimpl) тоже, если для Вашего проекта она не является избыточной. Можно просто выделить абстрактные классы.
А может вобще ничего это не нужно - все зависит от проекта.



Это сообщение отредактировал(а) mes - 19.1.2009, 12:13


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.