C++运算符重载

164 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

本文主要讲解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关键字让这个函数作为类的友元。

比如:

另外还有很多别的运算符号重载,比如递增、赋值、关系、函数调用运算符重载(小括号)等,仿函数就是重载小括号。 以上便是运算符重载方面的内容了,运算符重载多用于集合、封装类,比较常用,是相对重要的内容。