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++函数传参

  1. 将变量名作为实参和形参,这时传给形参的是变量的值,传递是单向的,如果在执行函数期间形参的值发生变化,并不传回给实参,因为在调用函数时,形参和实参不是同一个存储单元。
  2. 传递变量的指针,形参是指针变量,实参是一个变量的地址,调用函数时,形参(指针变量)指向实参变量单元,这种通过形参指针可以改变实参的值
  3. c++提供了传递变量的引用。形参是引用变量和实参是一个变量 调用函数时 形参(引用变量)指向实参变量单元。这种通过形参引用可以改变实参的值

 

posted @ 2019-03-05 22:14  碎纸屑  阅读(132)  评论(0编辑  收藏  举报