LINUX.ORG.RU

Class select

 


0

2

Есть базовый класс и его потомки. У каждого из них есть метод fun():

class Base {
}

class First : Base {
  fun();
}

class Second : Base {
  fun();
}

....

Хочу сделать так, чтобы в цикле можно было пройтись по всем потомкам класса и выполнить функцию fun().
Как это можно реализовать?

★★★★★

полиморфизЪм? virtual fun() и т.д....

AIv ★★★★★
()
Ответ на: комментарий от Zodd
#include <stdio.h>
class A { public: virtual ~A() {} virtual void fun() = 0; };
class B: public A { public: void fun() {printf("B...\n");}};
class C: public A { public: void fun() {printf("C...\n");}};
int main()
{
  A* a[2]; B b; C c; a[0] = &b; a[1] = &c;
  for(int i=0;i<2;i++)
    a[i]->fun();
  return 0;
}
anonymous
()
Ответ на: комментарий от anonymous

Всем спасибо. Пока объяснял проблему и сам разобрался.

Zodd ★★★★★
() автор топика
Ответ на: комментарий от Zodd

В С++ классы уже стали объектами? Не знаю, что там намесили в C++1x, традиционно без создания объекта можно было вызывать только статические методы класса - First::run(), Second::run() и так далее.

Список классов-наследников просто так не получишь, но этот список можно руками записать в макрос. И в этом же макросе указать параметром, какой метод ты хочешь вызвать.

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