运算符重载可以说是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 运算符重载引出和简要介绍
本文介绍了C++中的运算符重载,它是C++的一个重要特性,允许程序员为已有的运算符赋予新的功能。通过运算符重载,可以实现如字符串拼接等操作,使代码更简洁易读。文章探讨了运算符重载的定义,指出其本质是函数调用,并举例说明了如何通过`operator+=`实现字符串拼接。同时,强调了运算符重载的特点,包括不破坏原有运算符功能、保持运算符优先级和使用方式不变。最后,文章提醒读者并非所有运算符都可重载,并给出了学习运算符重载的视频资源链接。
&spm=1001.2101.3001.5002&articleId=121158687&d=1&t=3&u=5dc325408f8a4d3586f23d81aa151d7c)
273

被折叠的 条评论
为什么被折叠?



