//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;
}