C++允许开发者对同一范围内的某个函数或者运算符给出多种不同的定义,这分别称为函数重载和运算符重载。重载声明是指其名称与同范围内的原有声明相同,而参数和定义有所不同的声明。
调用重载函数或运算符时,编译器会把实际的参数类型与各定义中所指定的形式参数类型进行比较,并选出最为合适的定义。这个用来确定最合适的重载函数或运算符的过程就叫做重载解析。
- C++中的函数重载
同一范围内的某个函数可以具备多种定义。这些定义必须在参数的类型上或者参数数量上有所区别,单凭返回值的类型是不足以实现重载的。下面范例对print()函数实现重载。
#include<iostream>
using namespace std;
class printData
{
public:
void print(int i)
{
cout<<"Printing int:"<<i<<endl;
}
void print(double f)
{
cout<<"Printing double:"<<f<<endl;
}
void print(char*c)
{
cout<<"Printing character:"<<c<<endl;
}
};
int main(void)
{
printData pd;
pd.print(5);
pd.print(3.1415926);
pd.print("Hello world");
return 0;
}
- C++中运算符重载
C++语言中大部分运算符都可以重新定义或重载,使得其适用范围能够扩大到由用户自定义的数据类型上。重载的运算符实际上是一种具备特殊名称的函数,其名称以operator关键字开头,后面跟着需要重新定义的哪个运算符。与其他函数一样,这些重载的运算符函数也具备返回值类型和参数列表。
Box operator+(const Box&);
上面那行代码,重载了加法运算符,令其可以将两个Box对象加起来,并将结果以Box对象的形式返回给调用方。大部分的重载运算符都可以声明为类的成员函数,此外,也可以声明为普通的非成员函数。假如将刚才的重载用非成员函数来写,则可以表示为
Box operator+(const Box& p1,const Box& p2);
下面的示例代码以成员函数的形式来重载加法运算符
#include<iostream>
using namespace std;
class Box
{
private:
double length;
double breadth;
double height;
public:
double getVolume(void)
{
return length*breadth*height;
}
void setLength(double len)
{
this.length = len;
}
void setBreadth(double bre)
{
this.breadth = bre;
}
void setHeight(double hei)
{
this.height = hei;
}
//重载加法运算符
Box operator+(const Box& b)
{
Box box;
box.length = this.length+b.length;
box.breadth = this.breadth+b.breadth;
box.height = this.height+b.height;
return box;
}
}