LINUX.ORG.RU

Как понять в базовом классе что виртуальная функция была перегружена в наследнике?

 


0

2
struct A{
	virtual void f(){}
	bool check(){ return ... } 
};
struct B: public A{
	void f(){}
};
struct C: public A{
};

Чего бы такого написать в A::check() что бы при вызове B().check() получать true а при вызове C().check() получать false?

Ввести в A флаг и изменять его значение неспортивно;-)

★★★★★
Ответ на: комментарий от AntonI

тебе надо привилегию вызова цикла передать наследнику. для этого делаешь ещё один интерфейс и передаешь его в виртуальный метод. то что ты химичишь - аморально и безобразие. в следующий раз, когда заимплементируешь базовый класс, забудешь перегрузить check, и потом будешь с дебагером ебать мозг

struct base {
  struct cycleexecutor {
    void execute_cycle() = 0;
  }
  virtual void method(cycleexecutor &) {};
};

class ihneritee: base {
  void method(cycleexecutor &c) {c.execute_cycle();}
};

anonymous
()
Ответ на: комментарий от anonymous
struct cycleexecutor {
  struct Context {..};
  void execute_cycle(Context &) = 0;
};
  
struct base : cycleexecutor {
  virtual void method() {};
  void execute_cycle(Context &) {}
};

class ihneritee: base {
  void method() {Context c; execute_cycle(c);}
  void execute_cycle(Context &c) {for ...}
};

а ещё лучше так

anonymous
()
Ответ на: комментарий от anonymous

Аморально и безобразие - лезть с советами по теме о которой не просили советовать.

AntonI ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.