运算符重载可以说是C++中的灵魂,在类的使用过程中,用函数来写其实不是很方便,一个函数名,并不如一个符号调用的方便。
总结:
本篇只是对运算符重载进行引出和简单介绍,运算符重载的方式详细的请参考后文C++57个入门知识点_53 类成员的运算符重载及友元全局的运算符重载。
1. 运算符重载的定义
运算符重载的定义:**
重载已有的运算符,赋值新的功能
**
在一个程序中进行“hello”,“ world”
两个字符串的拼接,常见的写法int n=1+1
,那为了实现刚才所说的功能,可不可以这样去写 char* psz=“hello”+“ world”
,这时候其实是对+
的含义进行了一次扩充,因为+
本质上是对两个数字进行相加,字符串的拼接就类似于数字的相加。但是+
不识别左右两边是 char*
类型,已经超过了C++中原始的含义。
#include <iostream>
#include <string>
int main(int argc, char* argv[])
{
//两个字符串拼接
char* psz = "hello" + "world";
int n = 1 + 1;
}
编译结果:显示此种语法不成立
为了使得我们使用C++更为舒适,在C++的开发中有一些库函数,我们称之为stl
,标准的模板中有这种写法,首先引入标准中#include <string>
的头文件,引用using namespace std;
,这个可写可不写,标准库的提供所有函数都在标准的std
命名空间中,写了话就不需要在后边添加额外的std
。以下代码中将using namespace std
注释后的写法如下:
#include <iostream>
#include <string>
//using namespace std;
int main(int argc, char* argv[])
{
//两个字符串拼接
std::string str = "hello";
str += " world";//借用std空间内的stl
}
运行结果如下:两个字符串实现了拼接,+
实现了字符串拼接功能,比C中的strcat
更加高级
因此提出运算符重载。运算符重载的定义:重载已有的运算符,赋值新的功能
2. 运算符重载的本质和特点
运算符的重载本质还是函数的调用,
operator+=
即为函数名,上面使用
stl
的形式可以写作以下形式:
#include <iostream>
#include <string>
//using namespace std;
int main(int argc, char* argv[])
{
//两个字符串拼接
std::string str = "hello";
//运算符的重载本质还是函数的调用
str.operator+=(" world");//等价于上面的str += " world";,这种本质还是类似于调用operator函数
}
运行结果:
- 并不是所有的运算符都会重载,以下代码中的
-
并未在类中进行重载
#include <iostream>
#include <string>
//using namespace std;
int main(int argc, char* argv[])
{
//两个字符串拼接
std::string str = "hello";
str = str - " world";//-的含义不明显
}
编译结果如下:由于-
在类中的含义不明确,因此造成未被重载
因此提出运算符的以下特点:
- 不破坏原有运算符的功能:原有是加号功能,不能想象为其他功能,尽量运算符重载功能与原有功能相吻合,使用更加方便;
- 运算符的优先级不变
- 使用方式要保持不变:主要是指参数的个数
3.学习视频地址:C++57个入门知识点_51 运算符重载引出和简要介绍