Сложить два обьекта одного шаблона но с разными типами данных через оператор сложения
Здраствуйте нужно перегрузить оператор сложения для того чтобы была возможность сложить два обьекта шаблона но с разными типами данных.
Вот мой код но ругается в том моменте где я пытаюсь сложить два обьекта шаблона.
#include <iostream>
using namespace std;
template<typename T>
class Sum {
private:
T value;
public:
Sum() {
value = 0;
}
Sum(T value) {
this->value = value;
}
void Print() {
cout << value;
}
Sum<T>& operator+(const Sum<T>& classObj);
};
template <typename T>
Sum<T>& Sum<T>::operator+(const Sum<T>& classObj) {
Sum<T> temp;
temp.value = this->value + classObj.value;
return temp;
}
int main() {
setlocale(LC_ALL, "Rus");
Sum<double> first(14.5);
Sum<int> second(10);
first + second; //ошибка тут
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Например, так:
template<typename T>
class Sum {
private:
T value;
public:
Sum() {
value = 0;
}
Sum(T value) {
this->value = value;
}
void Print() {
cout << value;
}
template <typename V, typename U>
friend auto operator+(const Sum<V>& t, const Sum<U>& u);
};
template <typename T, typename U>
auto operator+(const Sum<T>& t, const Sum<U>& u)
{
Sum<common_type_t<T,U>> temp;
temp.value = t.value + u.value;
return temp;
}
int main() {
setlocale(LC_ALL, "Rus");
Sum<double> first(14.5);
Sum<int> second(10);
auto Q = first + second; //ошибка тут
Q.Print();
}