Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Заменя объектов с одинаковыми методами


Автор: Riddik 4.5.2009, 16:24
Есть несколько классов, у которых одинаковый метод (вернее имя функции-члена, а реализация - разная):

bob1.Load();
bob2.Load();
bob3.Load();
bob4.Load();

Есть ли какой-нибудь способ, чтобы вместо всех этих строчек,  в цикле, например, менять только имена объектов, 

bobX.Load();  чтобы менялось только bobX в runtime ?

Автор: azesmcar 4.5.2009, 16:32
Riddik

Что-то я не пойму..это ты полиморфизм пытаешся реализовать..немного подробнее о задаче пожалуйста.

Автор: zim22 4.5.2009, 16:33
Цитата(Riddik @  4.5.2009,  16:24 Найти цитируемый пост)
Есть ли какой-нибудь способ, чтобы вместо всех этих строчек,  в цикле, например, менять только имена объектов, 

создайте базовый класс. объявите в нём функцию Load виртуальной.
все ваши классы наследуйте от него.
используя указатель на базовый класс вызывайте соотв.функцию
Код

#include <iostream>

class Base {
public:
  virtual void Load() = 0;
  virtual ~Base() { }
};

class C1 : public Base {
public:
  virtual void Load() { std::cout << "C1::Load" << std::endl; }
};

class C2 : public Base {
public:
  virtual void Load() { std::cout << "C2::Load" << std::endl; }
};

int main()
{
  Base *pb[3];
  pb[0] = new C1;
  pb[1] = new C2;
  pb[2] = 0;
  
  int i = 0;
  for (Base *b = pb[0]; b; b = pb[++i])
    b->Load();

    return 0;
}

Автор: Riddik 4.5.2009, 16:45
В принципе, да - конец дня, чего-то я немного закипел. Спасибо, что быстро "встряхнули" smile

Да, нужно просто сделать абстрактный класс а потом юзать список указателей на базовый класс.

Спасибоsmile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)