C++ operator 学习

1.概述

1.1what

operator 是c++的一个关键字,和运算符如(=)一起使用,表示一个运算符重载函数

1.2why

对于C++提供的所有操作符,通常只支持对于基本数据类型和标准库中提供的类的操作,而对于用户自己定义的类,如果想要通过该操作符实现一些基本操作(比如比较大小,判断是否相等),就需要用户自己来定义关于这个操作符的具体实现了。

比如,我们要设计一个名为“person”的类,现在要判断person类的两个对象p1和p2是否一样大,我们设计的比较规则是按照其年龄来比较,那么,在设计person类的时候,就可以通过对操作符“”进行重载,来使用操作符“”对对象p1和p2进行比较了(根据前面的分析,实际上比较的内容应该是person类中的数据成员“age”)。

1.3 how

分为两种情况:

  1. 将操作符重载实现为类的成员函数;
  2. 实现为非类的成员函数(即全局函数);

1.3.1 将操作符重载实现为类的成员函数

在类体中声明(定义)需要重载的操作符,声明方式跟普通的成员函数一样,只不过操作符重载函数的名字是“关键字 operator +以及紧跟其后的一个C++预定义的操作符”,样式如下(person是我们定义的类;

bool operator==(const person& ps)
{
    if (this->age == ps.age)
    {
        return true;
    }
    return false;
}

1.3.2 实现为非类的成员函数(即全局函数)

对于全局重载操作符,代表左操作数的参数必须被显式指定。

bool operator == (person const& p1, person const& p2)
{
    if(p1.age==p2.age)
    {
        return ture;
    }
    else 
    {
        return false;
    }
}

1.3.3 方式选择

  1. 如果一个重载操作符是类成员,只有当它与一起使用的左操作数是该类的对象时,才会被调用;
  2. C++要求'='、'[]'、'()'、'->'操作符必须被定义为类的成员操作符,把这些操作符通过全局函数进行重载时会出现编译错误;
  3. 如果有一个操作数是类类型(如string类),那么对于对称操作符(比如==操作符),最好通过全局函数的方式进行重载

1.3.4 详细用法

参考:[https://blog.csdn.net/liitdar/article/details/80656156]:

原文地址:https://www.cnblogs.com/yjqjy/p/10594511.html