Допустим, у меня есть программа, в которой я хочу, чтобы решить уравнения (что-то вроде этого)указатели и ссылки + перегруженные операторы
Number x;
Func fw = x * 4 + x * x;
std::cout << fw(6.0) << "\n\n";
Таким образом, я начинаю писать абстрактный базовый класс, где у меня есть все что мне нужно для решения этого уравнения.
class Base
{
public:
Base(){};
virtual Base* operator*(Base& x) = 0;
virtual Base* operator*(double x) = 0;
virtual Base* operator+(Base& x) = 0;
};
и класс Номер
class Number : public Base
{
public:
virtual Base* operator*(Base& x);
virtual Base* operator*(double x);
virtual Base* operator+(Base& x);
};
и класс Func с копией конструктора (или, по крайней мере, Ithink, что это конструктор копирования)
class Func: public Base
{
Base * func;
public:
Func(Base* other)
{
func = other;
}
Func(Base& other)
{
func = &other;
}
virtual Base* operator*(Base& x){}
virtual Base* operator*(double x){}
virtual Base* operator+(Base&){}
};
Итак, моя проблема. Моя программа работает для x*x
или для x*4
, но когда я пытаюсь их объединить x*x + x*4
У меня проблема.
Это очевидно (или это не так), в чем проблема. После x*x
моя программа возвращает указатель (Base *), а в моих перегруженных операциях у меня есть только (Base &). Таким образом, программа не может сопоставить с ней какой-либо перегруженный оператор.
Вот что CLion показывает мне binary operator + can't be applied to the expression of type Base* and Base*
Таким образом, решение может быть перегрузка операторов еще раз, но с аргументом (Base *), но я надеюсь, что есть лучший способ решить эту проблему. Здесь?
Основные типы данных не поддерживают, например, добавление float и int вместе. Вместо этого есть продвижение, int для плавания в этом случае. Возможно, вы можете решить проблему аналогичным образом. Продвигайте разные типы к одному типу, а затем выполните операцию. –