| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Как сделать закрытую часть класа невидимой |
| Автор: Андрюша- BIGAIR 27.12.2005, 19:51 |
| Всем привет! Помогите пожайлуста от етого решается моя еценка на екзаме! Вопщм препод спросил : " Сказать концепцию, как можна сделать закрытую часть класа невидимой!" . Заранье очень благодареен! |
| Автор: Nitro89 27.12.2005, 19:55 | ||
| Парень конкретизируй вопрос. Непонятно, невидимой для кого. Вот например можно сделать так.
А? |
| Автор: JoyEx 27.12.2005, 20:05 |
| Андрюша, а на каком Вы курсе? private: может помочь. |
| Автор: maxim1000 27.12.2005, 20:55 | ||||||
| может, подразумевалось то, чтопрограммист, подключающий h-файл, в котором описан класс, не должен видеть его закрытых членов? если так, то может подойти такой вариант: все закрытые члены вытаскиваем в структуру, а в самом классе делаем указатель на нее, в конструкторе создаем, в деструкторе удаляем... Добавлено @ 20:59 пример: было
стало
а где-то в cpp
|
| Автор: Андрюша- BIGAIR 28.12.2005, 00:58 |
| |
| Автор: Андрюша- BIGAIR 28.12.2005, 01:01 |
| Можнно чуток подробней! Для меня молодого, "конструкторе создаем, в деструкторе удаляем... " - этот момент! Спасибо! |
| Автор: Chaos A.D. 28.12.2005, 07:55 | ||
Скажи преподу - "С помощью идиомы pimpl". Это и есть то, что показал maxim1000. В кач-ве примера можно привести такой код:
Удачи на экзамене. |
| Автор: Neitron 28.12.2005, 16:45 | ||
| Чушь это все..... Человеку скорее всего нужна простая схема создания интерфейсов... делается она так
|
| Автор: Андрюша- BIGAIR 28.12.2005, 23:21 |
| Спасибо большое! |
| Автор: DeadSoul 28.12.2005, 23:25 | ||
Судя по вопросу речь идет о PIMPL. И это не чушь. Это кардинально уменьшает время компиляции при изименение private-части класса. |
| Автор: profispb 28.12.2005, 23:51 |
| Извините за тупой вопрос а что такое PIMPL? |
| Автор: DeadSoul 29.12.2005, 00:27 | ||
То что описал maxim1000. Pimpl расшифровывается как Pointer to implementation. |
| Автор: profispb 29.12.2005, 08:57 |
| Спасибо за ответ DeadSoul. Теперь буду знать. |
| Автор: Guest 3.1.2006, 14:36 |
| Эх Яременко,Яременко ты бы еще Бублику на ftpэто вылажил. Тебе ---5 балов. Ну нельзя же так! И тебе не стыдно а? С новым годом! |
| Автор: ГЛАМУР 4.1.2006, 16:17 |
| А кокой смысл , етого так званого pimpl, в переводе читается как "указатель на реализацию"... Не могу понять что она делает! Мы невидим преременных закрытой части класа ? невидим всмысле - неможем использовать в программе или невидим исходный код |
| Автор: blackofe 4.1.2006, 18:36 | ||
так вот в том-то и вопрос: какая тебе невидимость нужна? вишь, народ мучается догадками. разъясни, чего именно ты хочешь. |
| Автор: завтра екзам:) 4.1.2006, 19:31 | ||||||
| А сама идиома, она делает невидимым что? Кокая разница в процесе выполнения программы , чего мы достигаем? между
и код С++
гдето в С++
|
| Автор: DeadSoul 4.1.2006, 22:33 |
| завтра екзам |
| Автор: до екзама 11 часов 4.1.2006, 23:25 |
| А можно пожайлусто примерчик с ихдодничком: как бы мы получали доступ без пимпл и как бы мы его не получали с пимпл. Доступ к чему? можно маленький примерчик |
| Автор: :( 4.1.2006, 23:29 | ||
Часть кода, приведенного раньше:
pimpl_->PrivateFn(); - мы работаем с указателем после того как его уже удалили в деструкторе?! Или как? |
| Автор: Guest 5.1.2006, 00:02 |
| Да ладно неважно! Можеш мне просто обяснить, что именно ета идеома делает невидимым! Принцип зачем она нужна? А нащет вывода: так это часть исходного кода, посмотри по этой теме чуток выше! |
| Автор: Daevaorn 5.1.2006, 00:10 |
| Эта идиома позволяет скрыть детали реализации класса. Так же она способствует уменьшению зависимостей времени компиляции, что благоприятно сказывается на скорости сборки. Принцип в том, что всё внутренне устройство класса скрыто и может быть написано в *.cpp файле. При этом для клиента класса остается только открытый интерфейс. Если потребуется изменение внутренней реализации класса, то всё делается опять таки в одном *.cpp файле. Это позволяет не перекомпилировать весь клиентский код, который использует данный класс. Конечно при изменении открытого интерфейса приемущества мы не получаем. |
| Автор: Guest 5.1.2006, 01:20 |
| Спасибо! Большое! |