zoukankan      html  css  js  c++  java
  • 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]:

  • 相关阅读:
    Linux_LEMP
    Linux_LEMP
    Linux_指令杂烩
    Linux_指令杂烩
    Linux_SELinux使用
    AWS S3存储基于Hadoop之上的一致性保证
    Ozone数据写入过程分析
    Ozone Datanode的分布式元数据管理
    聊聊Ozone的Topology Awareness
    Ozone数据探查服务Recon的启用
  • 原文地址:https://www.cnblogs.com/yjqjy/p/10594511.html
Copyright © 2011-2022 走看看