Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2010, 10:44   #1
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию Проектирование фабрики

Добрый день. Подскажите, реально ли следующее:

есть базовый класс
Код:
class Base {};
есть 2 наследника:

Код:
class Inherit1 : public Base {};
class Inherit2 : public Base {};
Нужно написать метод, который бы можно было вызывать из Inherit1 и Inherit2, содержащий примерно следующий код:

Код:
Base* method ( аргументы )
{
     if ( условие )
          return new Inherit1;
     else 
          return new Inherit2;
}
Тоесть метод должен знать о существовании обоих классов, а классы о существовании метода. Можно конечно вставить один и тот же код в оба наследника, но при дальнейшей модификации ведь можно и забыть о дубликате, да и наследников может быть гораздо больше 2. Как быть?
coinkrsk вне форума Ответить с цитированием
Старый 11.11.2010, 12:42   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

вызвать метод из класса для создания объекта этого же класса?

Код:
class base {
public:
   virtual base *method() = 0;
};

class inherit : public base {
public:
    virtual base *method() {
        return new inherit;
    }
};
ну и для второго класса так же
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 11.11.2010, 18:00   #3
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Наверное не четко поставил задачу.

Метод, который нужно написать должен быть способен создавать объекты обоих наследников.
Если утрировать, то код должен быть такой:
Код:
Base* method ( аргументы )
{
     if ( rand() % 2 )
          return new Inherit1;
     else 
          return new Inherit2;
}
Пока проблема решается паблик статик методом в первом наследнике, но хочется красиво. Если без больших головняков так сделать нельзя, то нет - тоже ответ.

Последний раз редактировалось coinkrsk; 11.11.2010 в 18:15.
coinkrsk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проектирование информационной системы Savrik Помощь студентам 0 02.06.2010 11:50
Проектирование информационных систем Myth2020 Помощь студентам 1 31.05.2010 17:37
Проектирование JKING Помощь студентам 0 02.05.2010 17:56
проектирование электронного словаря Romashechka Помощь студентам 0 10.05.2009 15:37
Проектирование CGI PavluxaF Работа с сетью в Delphi 2 07.05.2009 01:17