boolan——c++学习笔记之c++转换函数

1、conversion function(转换函数)

条件: 有一个基本类型转换函数

用途:把对象转成基本数据类型

例子:

class Fraction
{
public:
	explicit Fraction(int num, int den=1) 
	  : m_numerator(num), m_denominator(den)
	{ cout << m_numerator << ' ' << m_denominator << endl; }
	
 	operator double() const { //转换函数
      return (double)m_numerator / m_denominator; 
 	}
 	
/*	
	Fraction operator+(const Fraction& f){
	cout << "operator+(): " << f.m_numerator << ' ' << f.m_denominator << endl; //... plus return f; } 
*/
private:
	int m_numerator; //分子 
	int m_denominator; //分母
};
void test_conversion_functions()
{
	cout << "test_conversion_functions()" << endl;
	Fraction f(3,5);double d = 4 + f; //4.6,编译器查找有没有‘+’重载符,没有则查找有没有转化函数,找到double();
	cout << d << endl;//! Fraction d2 = f + 4; //ambiguous
}


2、non-explicit-one-argument ctor

条件: 单参构造函数(只有一个参数没有默认值)前没有加explicit

用途:把基本数据类型转成对象

例子:

class Fraction
{
public:
	explicit Fraction(int num, int den=1) 
	  : m_numerator(num), m_denominator(den)
	{ cout << m_numerator << ' ' << m_denominator << endl; }
 	
 	Fraction operator+(const Fraction& f) {  
	   cout << "operator+(): " << f.m_numerator << ' ' << f.m_denominator <<  endl;  
	   //... plus
	   return f; 
	} 
/*	
	Fraction(double d) 
	  : m_numerator(d * 1000), m_denominator(1000) 
	{ cout << m_numerator << ' ' << m_denominator << endl; }
*/

private:   
   int m_numerator;    //分子
   int m_denominator;  //分母
};
	
void test_conversion_functions()
{	
	cout << "test_conversion_functions()" << endl;
	
	Fraction f(3,5);	
	Fraction d2 = f + 4;	 //调用non-explicit ctor,将4转为Fraction(4)
							//然后再调用operator+
}



3、转换函数在标准库的应用

class vector中的operator [ ];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值