自定义类型转换函数

(本文参考自《More Effecitve C++》 Item5 谨慎定义类型转换函数)

自定义类型转换函数有2种: 1.隐式类型转换运算符; 2.单参数构造函数。
隐式类型转换运算符是一个成员函数:operator其后跟一个类型和符号;不用定义函数的返回类型,因为返回类型就是这个函数的名字。
单参数构造函数是指只用一个参数即可以调用的构造函数。该函数可以是只定义了一个参数,也可以是虽定义了多个参数但第一个参数以后的所有参数都有缺省值。
类型转换函数为程序提供了便利,但是如果控制不好,会调入陷阱;当你在不需要使用转换函数时,这些转换函数却会被调用运行;这些不正确的程序调用会做出一些意想不到的事情,而又很难判断出原因。

下面示例分析下类型转换函数的陷阱:


1. 隐式类型转换运算符
下面代码中cout<<r<<endl; 
本意输出Rational的r,由于Rational没有重载"<<",r将隐式调用 operator double()转换为double类型,违背了输出为Rational类型的本意。
解决办法为使用函数显示转换。
详见代码注释:

#include <iostream>
using namespace std;

class Rational 
{
public:
	Rational(int numerator = 0, int denominator = 1){} 
    //隐式类型转换运算符,转换为double
	operator double() const{}
	//函数显示转换为double
	dou
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值