什么是重载
重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
重载的作用:重载函数常用来实现功能类似而所处理的数据类型不同的问题。不能只有函数返回值类型不同。
C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符 重载。
重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但 是它们的参数列表和定义(实现)不相同。 当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参 数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为 重载决策。
函数重载
重载:重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。重载函数常用来实现功能类似而所处理的数据类型不同的问题。不能只有函数返回值类型不同。
#include <iostream>
#include <string>
using namespace std;
class Dog
{
public:
string name;
void getWeight(int weight)
{
cout<<name<<"的体重是:"<<weight<<"KG"<<endl;
}
void getWeight(double weight)
{
cout<<name<<"的体重是:"<<weight<<"KG"<<endl;
}
};
int main(int argc, char const *argv[])
{
Dog dog;
dog.name = "旺财";
dog.getWeight(10);
dog.getWeight(10.5);
return 0;
}
#include <iostream>
#include <string>
using namespace std;
class Person
{
public:
//1.成员函数重载+号
Person operator+(Person& p)
{
Person temp;
temp.a = this->a + p.a;
temp.b = this->b + p.b;
return temp;
}
int a;
int b;
};
int main(int argc, char const *argv[])
{
Person p1;
p1.a = 10;
p1.b = 10;
Person p2;
p2.a = 20;
p2.b = 20;
Person p3 = p1 + p2;
cout<<"p3.a = "<<p3.a<<endl;
cout<<"p3.b = "<<p3.b<<endl;
return 0;
}
程序执后的结果如下。
通过上面的例子我们可以知道重载函数的使用方法,避免用户传入的参数类型,有可能用 户传入的参数类型不在我们写的重载函数里,假若用户传入了一个字符串类型,这样编译器就 会匹配不到相应的重载函数,编译时就会报错。
运算符重载
运算符重载的实质就是函数重载或函数多态。运算符重载是一种形式的 C++多态。目的在 于让人能够用同名的函数来完成不同的基本操作。要重载运算符,需要使用被称为运算符函数 的特殊函数形式,运算符函数形式:operator p(argument-list),operator 后面的'p'为要重载的运 算符符号。重载运算符的格式如下:
<返回类型说明符> operator <运算符符号>(<参数表>)
{
<函数体>
}
下面是可重载的运算符列表:
下面是不可重载的运算符列表:
下面的实例使用成员函数演示了运算符重载的概念。在这里,对象作为参数进行传递,对象 的属性使用 this 运算符进行访问。
#include <iostream>
#include <string>
using namespace std;
class Dog
{
public:
int weight;
Dog operator+(const Dog &d)
{
Dog dog;
dog.weight = this -> weight + d.weight;
return dog;
}
};
int main(int argc, char const *argv[])
{
Dog dog1;
Dog dog2;
Dog dog3;
dog1.weight = 10;
dog2.weight = 20;
dog3 = dog1 + dog2;
cout<<"第三只狗的体重是: "<<dog3.weight<<endl;
return 0;
}
重载“+”运算符,注意函数必须与类名同名,把 Dog 对象作为传递,使用 this 运算符进行访问。然后返回一个 dog 对象。
编译完成后运行的结果如下。
结果可以预知的,重载运算符“+”,可以把两个对象进行相加。在普通的算术运算符“+” 是不能将两个对象进行相加的,所以我们重载运算符的意义可以体现在这里。