C++的重载有函数重载和运算符重载,总结下来有以下的特点:
- 对函数重载,可以用同名函数执行不同的操作(通常功能相似)。
- 对运算符重载,可以用简单的运算符(比如+,-,*等等),执行自定义的操作。
- 对函数重载需要与原函数形参不同。
- 对运算符重载需要前缀operator。
函数重载
函数重载很好理解,只需定义一个与以前定义过的名字相同的函数,修改形参的个数,类型等等,调用的时候计算机会根据传递的参数判断调用的是哪个函数。
运算符重载
对于运算符的重载,有一道例题:
重载运算符"+",让它能够计算两个复数的和。
#include <iostream>
using namespace std;
class Complex{//定义复数类
private:
double real;
double image;
public:
Complex(){
real=0;
image=0;
}
//没有参数输入的构造函数
Complex(double r,double i){
real=r;
image=i;
}
//有参数输入的构造函数
Complex operator+(Complex &obj){
//在类内部重载运算符+
Complex c;//用复数c来表示相加的结果
c.real=this->real+obj.real;
//重载的"+",让复数的实部和虚部分别相加
c.image=this->image+obj.image;
return c;
//返回“复数”,与“函数的类型”Complex相同
}
void display(){
cout<<real<<"+j"<<image<<endl;
}
};
int main(){
Complex c1(1,2);
Complex c2(3,4);
Complex c3;
c3=c1+c2;//调用重载的加号
c3.display();
}
得到的输出:4+j6,实现了复数相加的功能。
也可以用友元函数来重载运算符:
#include <iostream>
using namespace std;
class Complex{//定义复数类
private:
double real;
double image;
public:
Complex(){
real=0;
image=0;
}
//没有参数输入的构造函数
Complex(double r,double i){
real=r;
image=i;
}
//有参数输入的构造函数
friend Complex operator+(Complex &c1,Complex &c2);
//用友元函数重载+
void display(){
cout<<real<<"+j"<<image<<endl;
}
};
//在类外定义友元函数
Complex operator+(Complex &c1,Complex &c2){
Complex c;//用复数c来表示相加的结果
c.real=c1.real+c2.real;
//重载的"+",让复数的实部和虚部分别相加
c.image=c1.image+c2.image;
return c;
//返回“复数”,与“函数的类型”Complex相同
}
int main(){
Complex c1(1,2);
Complex c2(3,4);
Complex c3;
c3=c1+c2;//调用重载的加号
c3.display();
}
运行结果相同。
上述程序中还体现了构造函数的重载:
Complex(){
real=0;
image=0;
}
//没有参数输入的构造函数
Complex(double r,double i){
real=r;
image=i;
}