利用C++关键词operator实现操作运算符的重载

C++中的关键字operator能够对操作符进行重载,例如

    //对操作符*重载
    cuComplex operator*(const cuComplex &a)
    {

    }
    
    //对操作符+重载
    cuComplex operator+(const cuComplex &a)
    {

    }
    

代码实现 

#include<iostream>

using namespace std;

struct cuComplex
{
    float r;//复数实部 
    float i;//复数虚部 
    
    //无参构造函数初始化 
    cuComplex(){}
    //带参构造函数初始化,注意没有“;” 
    cuComplex(float a, float b):r(a), i(b){}
    
    cuComplex operator*(const cuComplex &complex)
    {
    	cout<<"r = "<<r<<"  "<<"complex.r = "<<complex.r<<endl;
    	cout<<"i = "<<i<<"  "<<"complex.i = "<<complex.i<<endl;
    	//若z1=a+bi,z2=c+di,则z1*z2=(ac-bd)+(bc+ad)i
        return cuComplex(r*complex.r-i*complex.i, i*complex.r+r*complex.i);
    }
    //求复数的模 
    float magnitude2(void){
        return r*r+i*i;
    }
};

int main(void)
{
	cuComplex a(2.5,4.8);
	cuComplex b(3.5,3.8);
	cuComplex c;
	 
	c=a*b;
	cout<<"模|c|="<<c.magnitude2();
	
	return 0;
}

 【注】这里特别注意一下带参构造函数初始化的C++语言风格。

运行结果

r = 2.5  complex.r = 3.5
i = 4.8  complex.i = 3.8
模|c|=781.75

【分析】

简单分析一下main()函数中c=a*b是如何实现的?

1)a,b,c的类型均是 cuComplex

2)为了便于理解,我们这里可以把operator*这个整体看做一个函数名。a*b其实就是cuComplex数据类型的a调用operator*这个“函数”,而根据这个“函数”的定义,显然我们需要传入一个参入“const cuComplex &a”,事实上,我们可以把cuComplex数据类型的b看做这个需要传入的参数。

3)简言之,对于a*b或a+b等等,操作符左边的变量作为“操作符重载函数”调用的主体,操作符右边的变量作为需要被传入的参量。例如本例中通过cuComplex数据类型的构造函数初始化a和b,a中的r和i分别被赋值为2.5和4.8,b中的r和i分别被赋值为3.5和3.8,cout的输出结果同样验证了我们的结论,即操作符左边是“函数”调用主体,操作符右边是需要传入的参数。

4一个结构体变量可以赋值给另一个相同类型的结构体,而a*b计算完成后返回的结果仍然cuComplex类型的,因此可以赋值给c。

    cuComplex operator*(const cuComplex &a)
    {
    	cout<<"r = "<<r<<"  "<<"a.r = "<<a.r<<endl;
    	cout<<"i = "<<i<<"  "<<"a.i = "<<a.i<<endl;
    	//若z1=a+bi,z2=c+di,则z1*z2=(ac-bd)+(bc+ad)i
        return cuComplex(r*a.r-i*a.i, i*a.r+r*a.i);
    }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值