1.举例说明什么是运算符重载:
int i1 = 1, i2 = 2; int isum = i1 + i2; double d1 = 1.1, d2 = 2.2; double dsum = d1 + d2; long l1 = 1, l2 = 2; long lsum = l1 + l2;
计算机对整数、双精度数、长整型数据的加法操作过程不同,C++已经对+进行了重载。
同理:<<和>> 位移运算符 流插入(左右)-------(提取)运算符,在不同的场合使用作用不同。
C++系统对<<和>>进行了重载,放在头文件stream中,因此如果要将它们用作流运算符的话,要:
#include<iostream>
using namespace std;
2.运算符重载的方法
运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就会自动调用该函数,以实现相应的运算。运算符重载实质上是函数的重载。
重载运算符的函数格式:
函数类型 operator 运算符名称(形参列表){对运算符的重载处理}
举例说明:复数相加
普通成员函数实现方法:
#include <iostream> using namespace std; class Complex{ public: Complex(){real = 0; imag = 0;} Complex(double r, double i){real = r; imag = i;} Complex complex_add(Complex& c2); void display(); private: double real; double imag; }; Complex Complex::complex_add(Complex& c2){ return Complex(real+c2.real, imag+c2.imag); } void Complex::display(){ cout<<"("<<real; if (imag>0){cout<<"+";} cout<<imag<<"i)"<<endl; } int main(){ Complex c1(3,4), c2(5,-10), c3; c3 = c1.complex_add(c2); cout<<"c1=";c1.display(); cout<<"c2=";c2.display(); cout<<"c3=";c3.display(); return 0; }
重载运算符方法:
#include <iostream> using namespace std; class Complex{ public: Complex(){real = 0; imag = 0;} Complex(double r, double i){real = r; imag = i;} Complex operator +(Complex& c2); void display(); private: double real; double imag; }; Complex Complex::operator+(Complex& c2){ return Complex(real+c2.real, imag+c2.imag); } void Complex::display(){ cout<<"("<<real; if (imag>0){cout<<"+";} cout<<imag<<"i)"<<endl; } int main(){ Complex c1(3,4), c2(5,-10), c3; c3 = c1 + c2; cout<<"c1=";c1.display(); cout<<"c2=";c2.display(); cout<<"c3=";c3.display(); return 0; }
在将运算符+重载为类的成员函数后,C++编译系统将c1+c2解释为:
c1.operator+(c2);