C++运算符重载

首先,先了解一下,关于重载的知识若不知道请网上查询,并不难,并不详细去介绍,重载是对一个已有的函数赋予新的定义,使之具有新的功能,运算符的重载也是这样

其实我们总在不知不觉之中使用了运算符的重载

运算符重载的方法是定义一个重载运算符的函数~那么.开始学习

运算符的重载就是函数的重载

运算符的重载形式如下

函数类型 operator 运算符名称 (形参列表)
{
对运算符的重载处理
}

例如

int operator + (int a;int b)
{
return (a-b);
}

再举一个实际问题来理解一下

我们要实现复数的加法:-(3,4i) + (6,7i) = (3,3i) 

Class Complex
{
public :
   Complex();
   Complex(double r,double i);
   Complex operator + (Complex &d);
   void Print();
private:
   double real; //实部
   double image; //虚部
}


重载的实现过程

Complex Complex::operator + (Complex & d)
{
Compelx C;
c.real = real + d.real;
c.image = image + d.image;
return C;

}

到这里难免会产生一个疑问(为什么参数列表里只有一个参数呢?不是应该有两个的吗?)

其实,由于我们的运算符重载是定义在类对象里的,所以会有一个隐含的参数,也就是说

C1+C2 相当于 C1.Operater+(C2);这样C1的参数也可以直接被重载运算符函数调用

也就是+这个函数相当于被认为是C1的一个函数调用的

当然,如果我们把重载运算符的方法放在类定义外,定义为类的友元函数就可以堂堂正正实现两个参数了

注意:一定要是友元函数,像这样

Class Complex
{
public :
   Complex();
   Complex(double r,double i);
 <span style="background-color: rgb(192, 192, 192);"> </span><span style="color:#ff0000;"><span style="background-color: rgb(192, 192, 192);"> <strong>friend</strong></span> </span>Complex operator + (Complex &d, <span style="font-family: Arial, Helvetica, sans-serif;"><span style="color:#ff0000;">Complex &c</span></span>);
   void Print();
private:
   double real; 
   double image; 
}
Complex Complex::operator + (Complex & d)
{
return Complex(c.real + d.real,c. image + d.image);

}

这样,就完成了友元函数的运算符重载(并不推荐这种方法)

定义友元函数是因为可能会出现需要调用类的私有数据成员

=================================================================

恩,大概了解一下(大家如果有什么不明白的可以给我留言或者发到我的邮箱)

下面要提示一下进行运算符重载时有以下5个运算符是不允许重载的

“.”成员访问运算符;“.*”(成员指针访问运算符);"::"(域运算符);“sizeof”(尺寸运算符);“? :”(条件运算符)

还有一些禁令

====================

重载不能改变运算符的优先级
重载不能改变运算符的结合律
重载不能改变运算符的操作数的个数
不能创建新的运算符,只能重载
重载的运算符只能对用户自定义的类型对象起作用,而不能影响基本数据类型的操作。
运算符必须被显式重载

=====================




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值