使用代理类限制隐式转换

#include<iostream>

using namespace std;

//ImplictChange只有一个数据成员x
class ImplictChange
{
public:
    ImplictChange(int a) : x(a) {}   //explicit可以防止隐式转换
    friend bool operator==(const ImplictChange& rhs,const ImplictChange& lhs) 
	{
		return(rhs.x == lhs.x);
	}

private:
	int x;
};


//用代理类来限制隐式转换
//原理:隐式转换只能被调用一次
class NoImplictChange
{
public:
    //增加代理类
	class Proxy
	{
	public:
		Proxy(int a) : x(a) {}
		int getX() const
		{
			return(x);
		}
	private:
		int x;
	};
 

    NoImplictChange(const Proxy& p) : pro(p) {}  
    friend bool operator==(const NoImplictChange& rhs,const NoImplictChange& lhs)
 	{
 		return(rhs.pro.getX() == lhs.pro.getX());
 	}
	
private:
    Proxy pro;
};


int main()
{
     ImplictChange a(1);
	 if(1 == a)              //此处就出现了隐式转换
	 {
		 cout << 1 << endl;
	 }
    
	 NoImplictChange b(1);
	 if(1 == b)
	 {
		 cout << 1 << endl;
	 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值