有关C++中类加法的两种方式

本文介绍了C++中处理类与类、类与常量相加的两种方法:使用类的构造转换函数和定义两个操作符重载函数。通过构造转换函数可以支持隐式转换,但可能导致问题,使用`explicit`可以控制这种转换。而定义两个操作符重载函数,一个为成员函数,另一个为友元函数,能分别处理类+常量和常量+类的情况。
摘要由CSDN通过智能技术生成

众所周知,C++允许使用操作符重载,从而使类与类、类与常量直接相加,简化写法。
而操作符重载跟使用的顺序有关,并不是那么简单的,比如a是一个类,如果你只定义了成员操作符重载函数,则写成a+1没有问题,写成1+a就会报错了,这个问题有两种解决方式:

1.使用类的 构造转换函数

假设我们定义了一个Complex类

class Complex
{
   
private:	
	int rel;//实部
	int img;//虚部
public:
	Complex(int n):rel(n),img(0){
   }//构造转换函数
	........
}

那么如果有类的构造转换函数,就可以支持这种写法

Complex a;
a=2;

注意,这里先调用构造转换函数,隐式地将2转换为了Complex类,然后再拷贝给a。
要进行这种隐式的转换是有条件的:
要么构造转换函数只有一个参数。

Complex(int n)

要么有多个参数,但从第二个开始给每个参数设置默认值

Complex(int n,int a=1,int b=2,......)

总之,这种隐式的转换看似方便,但也会带来很多问题,所以C++提供了explicit关键字用来关闭这种隐式转换:

explicit Complex(int n)

这样写,就只能显式的调用了

a=Complex(2);

接下来回归主题,有了这种构造转换函数,就可以轻松实现类与基本类型的相加,只要再定义一个友元类的操作符重载函数:

class Complex
}
private:	
	int rel;//实部
	int img;//虚部
public:
	Complex(int n):rel(n),img(0
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值