C plus plus day5 转换函数和引用
转换函数
class Fraction { public: Fraction(int num,int den=1) : m_numerator(num), m_denominator(den){} //转换函数没有返回类型 就是名称里的类型 转换不会改动类中的数据 //注意const operator double() const{ return (double)(m_numerator / m_denominator); } private: int m_numerator; int m_denominator; }; Fraction f(3,5); //f里面没有+操作符 编译器就会尝试把f转换成double类型的 再去运算 double d=4+f;//调用operator double()将f转为0.6
class Fraction { public: Fraction(int num,int den=1)//只要一个实参就够了 : m_numerator(num), m_denominator(den){} Fraction operator+(const Fraction& f){ return Fraction(...); } private: int m_numerator; int m_denominator; }; Fraction f(3,5); double d2=f +4; //将4转为Fraction(4,1) 类中+作用在右边 //然后调用operator+
class Fraction { public: explict Fraction(int num,int den=1) : m_numerator(num), m_denominator(den){} operator double() const{ return (double)(m_numerator / m_denominator); } Fraction operator+(const Fraction& f){ return Fraction(...); } private: int m_numerator; int m_denominator; }; Fraction f(3,5); double d2=f +4; //如果不加explict 编译会出错 编译器不知道去执行operator+ 还是Fraction
如果两个函数同时都有,需要看explict关键字 在哪个函数上面 哪个函数不会执行
引用
c++增加引用类型,主要把他作为函数参数,以扩充函数传递数据的功能。
c++函数传参
- 将变量名作为实参和形参,这时传给形参的是变量的值,传递是单向的,如果在执行函数期间形参的值发生变化,并不传回给实参,因为在调用函数时,形参和实参不是同一个存储单元。
- 传递变量的指针,形参是指针变量,实参是一个变量的地址,调用函数时,形参(指针变量)指向实参变量单元,这种通过形参指针可以改变实参的值
- c++提供了传递变量的引用。形参是引用变量和实参是一个变量 调用函数时 形参(引用变量)指向实参变量单元。这种通过形参引用可以改变实参的值