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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> принудительный вызов виртуального метода предка 
:(
    Опции темы
46&two
Дата 2.6.2004, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



у меня есть виртуальный метод yo (не чисто виртуальный, очевидно) класса parent
наследники этот метод как-то переопределяют.
я хочу, чтобы этот виртуальный метод предка принудительно вызывался у каждого потомка, если потомок вызывает переопределенный метод.
это возможно? если возможно, то как?
Т.е.
Код

class parent
{...........
  virtual void yo(){doSomething()}
 ...........
};

class child: public parent
{
..........
void yo(){//тоже что-то делает};
..........
};

я хочу чтобы child при вызове yo{} вызывал бы сначала parent::yo() и только потом непосредственно child::yo()

вариант с
Код

void child::yo(){parent::yo(); //dosomething}

не предлагать - я хочу, чтобы у потомка не было выбора, вызывать метод родителя или нет.
PM MAIL   Вверх
Vyacheslav
Дата 2.6.2004, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



У потомка выбора нет, выбор есть у программиста smile.gif и его вы этого выбора лишить не имеете права smile.gif

Такой вариант не подойдет?
Код

class parent
{
void yo( BaseExecute(); AddExecute() )
void BaseExecute(){doSomething()}}
virtual void AddExecute() {}
};

class child: public parent
{
..........
 void AddExecute() {//выполняем что-то дополнительно}
};




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
46&two
Дата 2.6.2004, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да. действительно, это решение.
PM MAIL   Вверх
achmed
Дата 2.6.2004, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



используйте шаблонный паттерн:

class parent
{...........
public:
  void yo(){doSomething();vyo()}
protected:
virtual vyo()=0;
 ...........
};

class child: public parent
{
..........
protected:
virtuel vyo(){//тоже что-то делает};
..........
};

клиент будет вызывать yo, в yo doSomething(), а потом перегруженная vyo

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


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

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