Мне нужно, чтобы одна переменная представляла два вида объектов, полученных из одного и того же базового класса.Использование объекта базового класса для представления его объектов производного класса
Это своего рода трудно описать, но я буду стараться самое лучшее:
Say базовый класс:
class Rectangle
{
float w;
float h;
const float area() {return w*h;}
};
И два производных класса:
class Poker : Rectangle
{
int style; // Diamond, Club, ....
int point; // A~10, J, Q, K
};
class BusinessCard : Rectangle
{
string name;
string address;
string phone;
};
Теперь это возможно объявить объект, который может быть либо покером, либо визитной карточкой?
«Потому что ниже использование является незаконным:
Rectangle* rec;
rec = new Poker();
delete rec;
rec = new BusinessCard();
полиморфизм может быть способом, но так как это хорошо только для изменения базового класса» атрибуты членов, мне нужен этот объект, чтобы быть в состоянии представить точно либо из производные объекты.
EDIT:
Спасибо за ответы на все вопросы. Наследование наследования, виртуальный деструктор и даже boost :: variant typedef - все это фантастические подсказки.
И виртуальный деструктор ... – sharptooth
Вы избили меня до него. =) –
@sharptooth: в то время как это, вероятно, хорошая идея, это * не * требуется, чтобы этот фрагмент кода работал, поэтому я думаю, что это не имеет прямого отношения к вопросу. –