Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: oleg_alexeev   (18.03.2007 в 19:32)
>> ... нужен универсальный указатель на 2 разных объекта. Возможно ли такое?

Здесь надо воспользоваться наследованием. Пусть эти 2 разных объекта будут производными от
одного базового класса. Тогда этим универсальным указателем будет указатель на базовый класс.
В очередь или список надо помещать именно его.


struct Base
{
  enum Type {TYPE_ONE, TYPE_TWO};

  Type m_type;

  static Base *Create();

  virtual ~Base();
};

struct Derived1 : public Base
{
  Derived1();
  virtual ~Derived1();
}

struct Derived2 : public Base
{
  Derived2();
  virtual ~Derived2();
}


Здесь очень важной является функция Create(). Это так называемая фабрика классов. Именно
она создает объекты классов Derived1 и Derived2 (считывая информацию для создания с диска,
например).

Работать с этими разными классами можно либо прочитав реальный тип объекта из поля m_type
и сделав явное приведение к нужному типу, либо полностью скрыть все данные объекта
(объявив их приватными) и работать с объектом только через виртуальные методы.

Хотя, если объекты отличаются только числом элементов в массиве, иерархия классов не
нужна. Но все равно придется завести поле, в котором хранится тип объекта.
И функции конструирования и рисования должны работать по разному, в зависимости от
типа объекта.


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: