// Wyo C++
// Ch. 14 Demo #8
// purpose - to illustrate a template class and a template function
#include <iostream.h>
template <class Whatever>
class Fraction
{
public:
Fraction();
Fraction(const Whatever, const Whatever);
void setNum(const Whatever);
void setDen(const Whatever);
Whatever getNum();
Whatever getDen();
double toDecimal();
void display();
private:
Whatever myNum;
Whatever myDen;
};
template <class Whatever>
void displayReciprocal(Fraction <Whatever> myFraction);
int main()
{
Fraction <int> fraction1;
Fraction <double> fraction2(2.5, 4.1);
fraction1.setNum(3);
fraction1.setDen(5);
fraction1.display();
cout << endl;
fraction2.display();
cout << endl;
displayReciprocal(fraction1);
cout << endl;
return 0;
}
template <class Whatever>
void displayReciprocal(Fraction <Whatever> myFraction)
{
cout << myFraction.getDen() << '/' << myFraction.getNum() << endl;
}
template <class Whatever>
Fraction<Whatever>::Fraction():myNum(0), myDen(0)
{}
template <class Whatever>
Fraction<Whatever>::Fraction(const Whatever num, const Whatever den)
{
myNum = num;
myDen = den;
}
template <class Whatever>
void Fraction<Whatever>::setNum(const Whatever num)
{
myNum = num;
}
template <class Whatever>
void Fraction<Whatever>::setDen(const Whatever den)
{
myDen = den;
}
template <class Whatever>
Whatever Fraction<Whatever>::getNum()
{
return myNum;
}
template <class Whatever>
Whatever Fraction<Whatever>::getDen()
{
return myDen;
}
template <class Whatever>
<Whatever> Fraction<Whatever>::toDecimal()
{
return myNum / myDen;
}
template <class Whatever>
void Fraction<Whatever>::display()
{
cout << myNum << '/' << myDen;
}