本文已参与「新人创作礼」活动,一起开启掘金创作之路。
本文主要讲解C++中运算符重载知识点,帮助广大码友理解掌握。 对已有运算符(比如加号减号)重新进行定义,赋予另一种功能,以适应不同对数据类型。
Q: 对于内置数据类型,编译器知道怎么处理。那对于自定义对类型呢?比如说定义Person类,怎么实现两个Person类型相加?
A: 这不得不用到运算符重载了。
比如说加法运算符重载,
1.成员函数实现运算符重载
class Person{
public:
//成员函数实现重载
Person operator+(Person &p){
Person temp;
temp.m_A = this->m_A + p.m_A;
temp.m_B = this->m_B + p.m_B;
return temp;
}
int m_A;
int m_B;
};
2.全局函数实现重载
Person operator+(Person &p1,int num){
Person temp;
temp.m_A = p1.m_A + num;
temp.m_B = p1.m_B + num;
return temp;
}
3.运算符重载发生函数重载
比如Person/ + int 类型:
Person operator+(Person &p1,int num){
Person temp;
temp.m_A = p1.m_A + num;
temp.m_B = p1.m_B + num;
return temp;
}
总结:
- 对于内置的数据类型的表达式的运算符是不可能改变的
- 不要滥用运算符重载
\
扩展: 左移运算符重载
- 实现的功能就是cout << 对象。 cout是标准的输出流对象
- 不能利用成员函数重载左移运算符(<<),因为无法实现cout在左侧。
只能利用全局函数重载左移运算符。
链式编程思想
访问类中私有属性的话,可以利用友元的思想,用friend关键字让这个函数作为类的友元。
比如:
另外还有很多别的运算符号重载,比如递增、赋值、关系、函数调用运算符重载(小括号)等,仿函数就是重载小括号。 以上便是运算符重载方面的内容了,运算符重载多用于集合、封装类,比较常用,是相对重要的内容。