运算符重载

来源:互联网 发布:中国证券软件下载 编辑:程序博客网 时间:2024/06/08 16:14

<<插入运算符

>>提取运算符

上面两个运算符本来是逻辑左移和逻辑右移,因此这两个运算符进行了重载。


运算符重载,使运算符能用于类对象;

运算符被重载后,其原有的功能仍然保留,没有丧失或改变;

运算符重载实际上是函数的重载:

对每个需要重载的运算符定义一个重载运算符的函数

需要执行被重载的运算符时,系统就自动调用该函数,以实现相应运算。



运算符重载的方法:

类型名 operator运算符名称 (形参表列){对运算符的重载处理},比如:

Complex Complex::operator+(Complex &c2)

{
Complex c;

c.real=real+c2.real;

c.imag=imag+c2.imag;

return c;

}

上面的程序更简单的写法:

Complex Complex::operator+(Complex &c)

{
return Complex(real+c.real.imag+c.imag);//直接调用了构造函数生成了结果对象,并返回

}

上面两种方式都是通过成员函数实现的。其实还可以通过友元函数或者一般函数进行实现,如下:

Complex operator+(Complex &c1,Complex &c2)

{

return (c1.real+c2.real,c1.imag+c2.imag);
}

只不过对于上面的实现来说,如果声明为友元函数还好,这样的话这个函数可以访问Complex类的私有数据成员

real和imag;但是如果是一般的函数,那么就需要在Complex类中定义public的set或者get函数,来对私有数据成员进行操作。


对于上面的对‘+’的运算符重载来说,可以通过

Complex c3=c1+c2;//需要注意的是这里调用了默认复制构造函数。通过浅复制将第一种方式中的c的值复制给了c3.然后第一种方式中的局部变量c就会被释放掉。

或者

c3=c1.operator+(c2);

来使用,这两种是等价的。需要注意的是对于前一种,当前对象一定是左边的这个,因为在后一种

中可以看到这其实就是当前对象调用了成员函数

原创粉丝点击