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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавить экземпляр класса, к обработке событий от предка 
V
    Опции темы
Rickert
  Дата 15.10.2009, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


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

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



Вообщем дело было так smile 
Есть абстрактный класс файла, с двумя виртуальными функциями: сохранения и загрузки. Создаю два класса потомка "a" & "b", у которых перегружаю эти функции. Теперь мне нужно чтобы файлы допустим с расширением *.a грузились через метод класса "а", а "*.b" - через класс "b" и в некий общий список добавлялся объект необходимого типа (ну реализовать это можно через список указателей родительского класса). Вопрос: как это сделать? У меня только пол мысли есть: создать класс, который просматривает входящие файлы, получает их расширение и в зависимости от него будет добавлять объект типа класс "а" или "b". Вся фигня: как мне сопоставить класс и строку? Т.е. не объект типа класс, а именно класс, чтобы потом использовать его для добавления соответствующего объекта?
Заранее список потомков неизвестен.

Это сообщение отредактировал(а) Rickert - 15.10.2009, 08:51


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
azesmcar
Дата 15.10.2009, 09:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Я что-то путаю или тебе нужен шаблон проектирования `фабрика`?
http://forum.vingrad.ru/forum/topic-266893...tml#st_0_view_0

Добавлено через 2 минуты и 47 секунд
что-то вроде этого.
Код

class Base
{
public:
    virtual void load() = 0;
    virtual void save() = 0;
};
class A : public Base
{
public:
    virtual void load() { std::cout << ".A" << std::endl; }
    virtual void save() { std::cout << ".A" << std::endl; }
};
class B : public Base
{
public:
    virtual void load() { std::cout << ".B" << std::endl; }
    virtual void save() { std::cout << ".B" << std::endl; }
};

int main()
{
    Factory<Base> factory;
    //register types
    factory.RegisterType<A>(".A");
    factory.RegisterType<B>(".B");
    
    Base* aPtr = factory.Create(".A");
    aPtr->load();
    aPtr->save();
    delete aPtr;

    Base* bPtr = factory.Create(".A");
    bPtr->load();
    bPtr->save();
    delete bPtr;
}

PM   Вверх
Rickert
Дата 15.10.2009, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


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

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



Да, примерно это, но меня смущает что приходиться хранить экземпляр объекта чтобы мочь вызвать функцию его создания. Надо подумать. Спасибо.
solved smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
azesmcar
Дата 15.10.2009, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Rickert

Ну кто-то же должен создавать этот объект smile 
PM   Вверх
Rickert
Дата 15.10.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


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

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



Да, хорошо, мне нравится решение, хотя ошибачно думалось что у вас есть лишний код. smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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