У меня есть базовый класс
class base {
public:
base();
int someData;
virtual void foo(){
std::cout << someData;
}
};
и несколько производных классов, таких как
class derived : public base {
public:
derived();
void foo(){
std::cout << someData * 5;
}
};
В основном они имеют один и тот же тип данных, но операции с этими данными различны. У меня есть еще один класс, который не нуждается в подробностях моего объекта, все, что ему нужно сделать, это установить данные и вызвать производные foo().
class useData {
public:
useData();
base x;
int do() { x.someData = 5; return x.foo(); }
};
Я хочу, чтобы "useData" был как можно более общим, поэтому я использую базовый класс вместо производного класса в его определении. Конечно, в этом случае он будет вызывать базовый метод, а не производный. Как я могу переписать свой код или сделать его автоматически (без проверки типа или аналогичного) вызвать производный метод?
спасибо
Для использования полиморфизма вам нужен указатель или ссылки. Поэтому в useData
переменная x
должна быть объявлена как base *
. После этого вы можете создать new
с любым производным классом. Полиморфизм будет действовать, как ожидалось.