Как запретить функции преобразовывать производный класс в базовый?
Есть функция, в которую кидается объект базового класса. Я хочу запретить компилятору преобразовывать производные классы в базовый(именно в этой функции). То есть хочу сделать так, чтоб в функцию можно было передать только объект базового класса, а при передачи объекта производного класса - компилятор выдавал ошибку. Как это сделать?
Определение базового класса(он абстрактный):
class Expression
{
protected:
string GetUnknownValue(const string unknowns, const string unknown);
void parse(string& val);//передаваемая строка будет уничтожена,\
считаем, что на вход подается Польская нотация формулы
public:
virtual void print() = 0;
virtual Expression* derivative(const string unknown) = 0;
virtual int eval(const string unknowns) = 0;
virtual Expression* simplification() = 0;
};
Производные классы практически одинаковые, отличаются лишь конструкторами, вот один из таких классов:
class Div : public Expression
{
private:
Expression* f_param_;
Expression* s_param_;
public:
//гарантируем где-то себе, что передаются только правильные указатели
Div(Expression* f_param, Expression* s_param) : f_param_(f_param), s_param_(s_param) {}
~Div();
void print() override;
Expression* derivative(const string unknown) override;
int eval(const string unknowns) override;
Expression* simplification() override;
};