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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать закрытую часть класа невидимой, Вопрос на экзамене! 
:(
    Опции темы
Андрюша- BIGAIR
Дата 27.12.2005, 19:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всем привет! Помогите пожайлуста от етого решается моя еценка на екзаме! Вопщм препод спросил : " Сказать концепцию, как можна сделать закрытую часть класа невидимой!" . Заранье очень благодареен! smile
  Вверх
Nitro89
Дата 27.12.2005, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Парень конкретизируй вопрос. Непонятно, невидимой для кого.
Вот например можно сделать так.
Код

class A { //вспомогательный класс
protected:
//закрытая часть класса
};
class B: public A {  //нужный нам класс
//часть класса A закрыта, но в определении ее не видно,
//такая нужна невидимость?
};

А?
PM MAIL ICQ   Вверх
JoyEx
Дата 27.12.2005, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


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

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



Андрюша, а на каком Вы курсе?

private: может помочь.


--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
maxim1000
Дата 27.12.2005, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



может, подразумевалось то, чтопрограммист, подключающий h-файл, в котором описан класс, не должен видеть его закрытых членов?
если так, то может подойти такой вариант: все закрытые члены вытаскиваем в структуру, а в самом классе делаем указатель на нее, в конструкторе создаем, в деструкторе удаляем...
Добавлено @ 20:59
пример:
было
Код

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

стало
Код

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

а где-то в cpp
Код

struct PrivateMembers
{
  int x;
  double y;
};



--------------------
qqq
PM WWW   Вверх
Андрюша- BIGAIR
Дата 28.12.2005, 00:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











smile Кстати так оно звучит! - программист, подключающий h-файл, в котором описан класс, не должен видеть его закрытых членов! maxim1000 Спасибо! Может и оно! smile Неуверен! Но вопрос звучит имено так!

  Вверх
Андрюша- BIGAIR
Дата 28.12.2005, 01:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Можнно чуток подробней! Для меня молодого, "конструкторе создаем, в деструкторе удаляем... " - этот момент! Спасибо!
  Вверх
Chaos A.D.
Дата 28.12.2005, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 16.1.2005
Где: 09 RUS

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



Скажи преподу - "С помощью идиомы pimpl". Это и есть то, что показал maxim1000. В кач-ве примера можно привести такой код:

Код


/* foo.h */
class Foo
{
        struct FooImpl;
        FooImpl *pimpl_;  // за этим так называемым "брандмауэром компиляции"
                          // и скрывается весь закрытый интерфейс.

    public :
        Foo( void );
        ~Foo( void );
        
        void Fn( void );
};

/* foo.cpp */

#include "foo.h"

struct FooImpl
{
    void PrivateFn( void ) { /*...*/ }
    // Все закрытые функции выноси сюда.
};

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

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


Удачи на экзамене.
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest
PM MAIL   Вверх
Neitron
Дата 28.12.2005, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Чушь это все.....
Человеку скорее всего нужна простая схема создания интерфейсов...
делается она так

Код

class Interface
{
 int a;
int b;
virtual void f()=0;
};

class Code : public Interface
{
void f();
void b();
};

//где-то в коде....

Interface * I = new Code();

/*Теперь I знает только о методах класса interface но,
 в его реализации и работе присутствует методы класса Code;*/


Это сообщение отредактировал(а) Neitron - 28.12.2005, 16:47


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
Андрюша- BIGAIR
Дата 28.12.2005, 23:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо большое!
  Вверх
DeadSoul
Дата 28.12.2005, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Neitron @ 28.12.2005, 16:45)
Чушь это все.....

Судя по вопросу речь идет о PIMPL. И это не чушь. Это кардинально уменьшает время компиляции при изименение private-части класса.


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

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
profispb
Дата 28.12.2005, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Извините за тупой вопрос а что такое PIMPL? smile
--------------------
В жизни, я люблю делать, то что я люблю. А не то что модно, престижно и выгодноЛюблю когда начинает работать, то что без меня не работало!
PM MAIL ICQ   Вверх
DeadSoul
Дата 29.12.2005, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(profispb @ 28.12.2005, 23:51)
Извините за тупой вопрос а что такое PIMPL?

То что описал maxim1000. Pimpl расшифровывается как Pointer to implementation.




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

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
profispb
Дата 29.12.2005, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо за ответ DeadSoul. Теперь буду знать. smile
--------------------
В жизни, я люблю делать, то что я люблю. А не то что модно, престижно и выгодноЛюблю когда начинает работать, то что без меня не работало!
PM MAIL ICQ   Вверх
Guest
Дата 3.1.2006, 14:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Эх Яременко,Яременко ты бы еще Бублику на ftpэто вылажил. Тебе ---5 балов. Ну нельзя же так! И тебе не стыдно а? С новым годом! smile
  Вверх
ГЛАМУР
Дата 4.1.2006, 16:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А кокой смысл , етого так званого pimpl, в переводе читается как "указатель на реализацию"... Не могу понять что она делает! Мы невидим преременных закрытой части класа ? невидим всмысле - неможем использовать в программе или невидим исходный кодsmile! просто мне это , на моем уровне программирования, тяжело понять! Зарание спасибо за уточнение!
  Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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