#ifndef NUMBER_H
#define NUMBER_H

#include<iostream>
using namespace std;

template<class T>
class Number {
private:
    T x;
public:
    Number();/// {}
    Number(T xin);/// : x(xin) {}
    T operator=(Number rho);
    T operator+(Number rho);
    T operator-(Number rho);
    T operator*(Number rho);
    T operator/(Number rho);
    void show() const { cout << x; }
    T get() const { return x; }
    void set(T xin) { x = xin; }
};

template<typename T>
ostream& operator<<(ostream& os, const Number<T>& xint) {
    os << xint.get();
    return os;
}

template<typename T>
istream& operator>>(istream& is, Number<T>& rho) {
    T xin;
    is >> xin;
    rho.set(xin);
    return is;
}



template<typename T>
Number<T>::Number() {}

template<typename T>
Number<T>::Number(T xin) : x(xin) {}

template<typename T>
T Number<T>::operator=(Number rho) {
    x=rho.x;
    return x;
}
template<typename T>
T Number<T>::operator+(Number rho) {
    return x + rho.x;
}

template<typename T>
T Number<T>::operator-(Number rho) {
    return x - rho.x;
}

template<typename T>
T Number<T>::operator*(Number rho) {
    return x * rho.x;
}

template<typename T>
T Number<T>::operator/(Number<T> rho) {
    return x / rho.x;
}


#endif
