Автор: 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
и сделав явное приведение к нужному типу, либо полностью скрыть все данные объекта
(объявив их приватными) и работать с объектом только через виртуальные методы.
Хотя, если объекты отличаются только числом элементов в массиве, иерархия классов не
нужна. Но все равно придется завести поле, в котором хранится тип объекта.
И функции конструирования и рисования должны работать по разному, в зависимости от
типа объекта.