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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать закрытую часть класа невидимой, Вопрос на экзамене! 
:(
    Опции темы
blackofe
Дата 4.1.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(ГЛАМУР @ 4.1.2006, 16:17)
невидим всмысле - неможем использовать в программе или невидим исходный кодsmile!

так вот в том-то и вопрос: какая тебе невидимость нужна? вишь, народ мучается догадками. разъясни, чего именно ты хочешь.
PM MAIL   Вверх
завтра екзам:)
Дата 4.1.2006, 19:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А сама идиома, она делает невидимым что? Кокая разница в процесе выполнения программы , чего мы достигаем?

между
Код

class A
{
  public:
    ...
  private:
    int x;
    double y;
};


и
код С++
Код

struct PrivateMembers;
class A
{
  public:
    ...
  private:
    PrivateMembers *Private;
};


гдето в С++
Код

struct PrivateMembers
{
  int x;
  double y;
};



  Вверх
DeadSoul
Дата 4.1.2006, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

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



завтра екзамsmile, большая разница. При использование PIMPL мы не сможем легальнополучить доступ к закрытой части класса


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
до екзама 11 часов
Дата 4.1.2006, 23:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А можно пожайлусто примерчик с ихдодничком:
как бы мы получали доступ без пимпл
и как бы мы его не получали с пимпл.



Доступ к чему? smile К переменным, или к исходному тексту? smile
можно маленький примерчикsmile
  Вверх
:(
Дата 4.1.2006, 23:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Часть кода, приведенного раньше:

Код

Foo::Foo( void ) : pimpl_(new FooImpl) {}    // Это и есть "конструкторе создаем".
Foo::~Foo( void ) { delete pimpl_; }    // А это соответственно "деструкторе удаляем"

void Foo::Fn( void )
{
    DoSomething();
    pimpl_->PrivateFn();
}


pimpl_->PrivateFn(); - мы работаем с указателем после того как его уже удалили в деструкторе?!

Или как? smile smile
  Вверх
Daevaorn
Дата 4.1.2006, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



smile+ 4.1.2006, 23:29, post606456-->
Цитата(smile @ 4.1.2006, 23:29 Найти цитируемый пост)

pimpl_->PrivateFn(); - мы работаем с указателем после того как его уже удалили в деструкторе?! 


Интересно откуда ты сделал такой вывод? smile
PM MAIL WWW   Вверх
Guest
Дата 5.1.2006, 00:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да ладно неважно! Можеш мне просто обяснить, что именно ета идеома делает невидимым! Принцип зачем она нужна?

А нащет вывода: так это часть исходного кода, посмотри по этой теме чуток выше!
  Вверх
Daevaorn
Дата 5.1.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Эта идиома позволяет скрыть детали реализации класса. Так же она способствует уменьшению зависимостей времени компиляции, что благоприятно сказывается на скорости сборки.
Принцип в том, что всё внутренне устройство класса скрыто и может быть написано в *.cpp файле. При этом для клиента класса остается только открытый интерфейс. Если потребуется изменение внутренней реализации класса, то всё делается опять таки в одном *.cpp файле. Это позволяет не перекомпилировать весь клиентский код, который использует данный класс. Конечно при изменении открытого интерфейса приемущества мы не получаем.
PM MAIL WWW   Вверх
Guest
Дата 5.1.2006, 01:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо! Большое!
  Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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