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<< "打印浮动:"<< f<< ENDL;
}
void print(char * c){
cout<< "打印字符:"<< c<< ENDL;
}
};
int main(void){
printData pd;
//调用print打印整数
pd.print(5);
//调用print打印浮点数
pd.print(500.263);
//调用print打印字符
pd.print("Hello C ++");
返回0;
}
编译并执行上述代码时,会产生以下结果−
打印int:5
打印浮动:500.263
打印字符:Hello C ++
运营商在C ++中重载
您可以重新定义或重载C ++中可用的大多数内置运算符。因此,程序员也可以使用具有用户定义类型的运算符。
重载运算符是具有特殊名称的函数:关键字"运算符"后跟定义的运算符的符号。与任何其他函数一样,重载运算符具有返回类型和参数列表。
Box运算符+(const Box&);
声明可用于添加两个Box对象的加法运算符并返回最终的Box对象。大多数重载运算符可以定义为普通的非成员函数或类成员函数。如果我们将上面的函数定义为类的非成员函数,那么我们必须为每个操作数传递两个参数,如下所示−
Box operator +(const Box&,const Box&);
以下是使用成员函数显示运算符过载概念的示例。这里一个对象作为参数传递,其属性将使用该对象访问,可以使用 this 运算符访问将调用此运算符的对象,如下所述−
直播演示
#include< iostream>
using namespace std;
class Box {
public:
double getVolume(void){
return length * breadth * height;
}
void setLength(double len){
length = len;
}
void setBreadth(double bre){
breadth = bre;
}
void setHeight(double hei){
height = hei;
}
//重载+运算符添加两个Box对象。
Box运算符+(const box& b){
Box box;
box.length = this-> length + b.length;
box.breadth = this-> breadth + b.breadth;
box.height = this-> height + b.height;
返回框;
}
私人:
双倍长度; //一个盒子的长度
双宽度; //一个盒子的宽度
双倍高度; //一个盒子的高度
};
//程序的主要功能
int main(){
Box Box1; //声明Box的类型为Box
Box Box2; //声明Box2类型为Box
Box Box3; //声明Box3类型为Box
double volume = 0.0; //在这里存储一个盒子的体积
//盒子1规格
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
//方框2规范
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
//框的体积1
volume = Box1.getVolume();
cout<< "Box1的卷:"<<体积<< endl;
//框的体积2
volume = Box2.getVolume();
cout<< "Box2的卷:"<<体积<< endl;
//添加两个对象,如下所示:
Box3 = Box1 + Box2;
//框的体积3
volume = Box3.getVolume();
cout<< "Box3的卷:"<<体积<< endl;
返回0;
}
编译并执行上述代码时,会产生以下结果−
Box1的成交量:210
Box2的成交量:1560
Box3的成交量:5400
Overloadable / Non-overloadableOperators
以下是可以重载和减去的运算符列表;
+ | - | * | / | % | ^ |
& | | | 〜 | ! | , | = |
< | > | < = | > = | ++ | - |
<< | >> | == | != | && | || |
+ = | - = | / = | %= | ^ = | & = |
| = | * = | << = | >> = | [] | () |
- > | - > * | new | new [] | delete | delete [] |
以下是运算符列表,不能重载和减去;
: : | 。* | 。 | ?: |
运算符重载示例
以下是各种运算符重载示例,可帮助您理解概念。
Sr.No | 运算符&示例 |
---|---|
1 | 一元运算符重载 |
2 | 二进制运算符重载 |
3 | 关系运算符重载 |
4 | 输入/输出运算符重载 |
5 | ++和 - 运算符重载 |
6 | 赋值运算符重载 |
7 | 函数调用()运算符重载 |
8 | 订阅[]运算符重载 |
9 | 类成员访问操作员 - >超载 |