C++入门学习笔记3:重载
- Sunny
- 0
在同一个作用域允许一个函数或运算符指定多个定义,称为重载
当调用一个重载函数或重载运算符时,编译器通过将使用参数类型与定义中的参数类型进行比较,决定使用最合适的定义。这一过程称为重载决策。
函数重载
在同一作用域范围内,声明几个功能相似的同名函数,但这些同名函数的形式参数(个数、类型或顺序)必须不同。
不能仅通过返回类型不同来重载函数。
实例:
#include"pch.h"
#include <iostream>
using namespace std;
class Myprint
{
public:
void print(int i) {
cout << "整数为:" << i << endl;
}
void print(float f) {
cout << "浮点数为:" << f << endl;
}
void print(char c[]) {
cout << "字符串为:" << c << endl;
}
};
int main(void) {
Myprint Mp;
int i = 5; //创建整型变量
float f = 5.2; //创建浮点型变量
char c[] = "Hello world"; //创建数组储存字符串
Mp.print(i); //输出整数
Mp.print(f); //输出浮点数
Mp.print(c); //输出字符串
return 0;
}
运算符重载
运算符重载实质是函数重载;
格式:函数类型
operator
重载运算符名称
(形参列表)
{对运算符的重载处理}
其中形参列表形式为:const
类名
&
a
(具体有关于const
引用的解释请见这篇帖子)
实例(这里以自定义对象的加法为例重载运算符+
):
#include"pch.h"
#include <iostream>
using namespace std;
class Box{
public:
void setLength(double len) {
length = len;
}
void setBreadth(double bre) {
breadth = bre;
}
void setHeight(double hei) {
height = hei;
}
double getVolume(void) {
return length * breadth * height;
}
//运算符重载
Box operator+(const Box& a) {
Box box;
box.length = this->length + a.length;
box.breadth = this->breadth + a.breadth;
box.height = this->height + a.height;
return box;
};
private:
double length; // 长度
double breadth; // 宽度
double height; // 高度
};
int main(void) {
Box Box1; // 声明 Box1,类型为 Box
Box Box2; // 声明 Box2,类型为 Box
Box Box3; // 声明 Box3,类型为 Box
double volume = 0.0; // 把体积存储在该变量中
// Box1 详述
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
// Box2 详述
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
// 把两个对象相加,得到 Box3
Box3 = Box1 + Box2;
// Box3 的体积
volume = Box3.getVolume();
cout << "方块体3的体积为:" << volume << endl;
return 0;
}
不可重载的运算符
.
:成员访问运算符;.*
,->*
:成员指针访问运算符;::
:域运算符;sizeof
:长度运算符;?:
:条件运算符;#
:预处理运算符;
其余的运算符都是可以重载的。