模版类运算符重载

自定义分数模版类,运算符重载,同时支持宽字符,wchar_t

#include
#include
#include

template //分数模版类
class Fraction
{
public:
    Fraction()=default;
    Fraction(classT m,classT d):mol(m),del(d){}

    Fraction& operator=(const Fraction&);
    classT numerator()const;
    classT denominator()const;
private:
    classT mol,del;

};
template
inline
Fraction& Fraction::operator=(const Fraction& rhs)
{
    this->mol=rhs.mol;
    this->del=rhs.del;
    return *this;
}
template
inline
classT Fraction::numerator()const
{
    return mol;
}
template
inline
classT Fraction::denominator()const
{
    return del;
}
template,typename classT>  //输入运算符,
inline
std::basic_istream&  //支持国际化char和wchar_t
operator>>(std::basic_istream& strm,Fraction& f)
{
    int n,d;

    strm>>n;
    if(strm.peek()=='/')
    {
        strm.ignore();
        strm>>d;
    }
    else
    {
        d=1;
    }
    if(d==0)
    {
        strm.setstate(std::ios::failbit);
        return strm;
    }

    if(strm)
    {
        f=Fraction(n,d);
    }
    return strm;
}

template,typename classT> //输出运算符
inline
std::basic_ostream&
operator << (std::basic_ostream& strm,
             const Fraction& f)
{
    std::basic_ostringstream s;
    s.copyfmt(strm);
    s.width(0);

    s< b;
    std::cin>>b;
    std::cout<

你可能感兴趣的:(C/C++)