C++ non-explicit-one argument ctor(具有一个实参的构造函数)

//non-explicit-one argument ctor(具有一个实参的构造函数)
#include <iostream> 
using namespace std;
class Fraction
{
    public:
          Fraction(int num,int den=1) 
          :m_numerator(num),m_denominator(den){//虽然具有两个变量,但是其中一个den已经赋给了初值,所以处理时只需要传入一个实数 
          }
        int get_m_numerator() const{return m_numerator;}    
        int get_m_denominator() const{return m_denominator;}
    private:
       int m_numerator;//分子
       int m_denominator; //分母 
};
inline int get_m_numerator
(const Fraction& x)
{
  return x.get_m_numerator ();//需要利用令一层嵌套,来获取类里的值;
                              //在类中的不能直接调用,会报错未声明,需要再次声明 
}

inline int get_m_denominator
(const Fraction& x)
{
  return x.get_m_denominator ();
}
inline Fraction
operator + (const Fraction& x, const Fraction& y)
{
  return Fraction ( get_m_numerator(x) + get_m_numerator(y), get_m_denominator (x) + get_m_denominator (y));//为了简化直接以分母为1来实现,简化了通分的步骤 
}
int main()
{
    Fraction f(3,1);
    Fraction d=f+4;//编译器会查找是否定义操作符‘+’的操作,发现已经定义
                   //调用 noexplicit ctor将四转化为Fraction(4,1)
                   //然后调用operator+,实现相加 
    cout<<d.get_m_numerator()<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zmachine/p/12239089.html
今日推荐