Как запретить функции преобразовывать производный класс в базовый?

Есть функция, в которую кидается объект базового класса. Я хочу запретить компилятору преобразовывать производные классы в базовый(именно в этой функции). То есть хочу сделать так, чтоб в функцию можно было передать только объект базового класса, а при передачи объекта производного класса - компилятор выдавал ошибку. Как это сделать?

Определение базового класса(он абстрактный):

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;
};

Ответы (0 шт):