У меня есть класс, называемый номером, и мне нужна помощь при перегрузке оператора.перегрузка << оператор с шаблоном для изменения вывода
template<class T>
class Number{
public:
Number(T _numerator,T _denominator){
numerator = _numerator;
denominator = _denominator;
}
~Number(){
;
}
T GetData(){
return numerator/denominator;
}
friend std::ostream &operator<<(std::ostream &out, Number c) //output
{
out << c.numerator/c.denominator;
return out;
}
void SetData(T _numerator,T _denominator){
numerator = _numerator;
denominator = _denominator;
}
private:
T numerator;
T denominator;
};
это то, что у меня есть, что работает, но я хотел бы еще один перегружен, как:
template<class X>
friend std::ostream &operator<<(std::ostream &out, Number c) //output
{
out << (X)c.numerator/(X)c.denominator;
return out;
}
что путь я могу назвать соиЬ как это (я знаю, что я мог бы просто изменить шаблон Номера для двойного, но это не то, что я хочу):
Number<int> t(10,23);
std::cout << t<double> << "\n";
однако это не скомпилировано. так что все равно использовать шаблоны? или альтернативное решение, отличное от простого создания нормальной функции?
в общем случае вы должны использовать операторы слияния C++ вместо оператора cast() '' стиля ''. т.е. 'static_cast'. –
Я просто сделал быстрый поиск в Google, и я думаю, что вы правы. Есть ли преимущества в стиле c-стиле? – XenoZergNid
Да, я все еще иногда использую C-стиль, когда я ленив. Но я не думаю, что ленивость хорошая. Операторы слияния C++ намного безопаснее. static_cast прежде всего. –