• 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]:

  • 相关阅读:
    redis php 实例
    redis 常用操作命令
    Django2.2集成xadmin管理后台所遇到的错误集锦,解决填坑
    软件测试理论知识点
    网络七层协议模型、TCP/IP四层模型
    UDP和TCP有什么区别
    HTTP与HTTPS的区别
    mysql的主键和索引
    mysql 事务未提交导致死锁 Lock wait timeout exceeded; try restarting transaction 解决办法
    chmod命令详细用法
  • 原文地址:https://www.cnblogs.com/yjqjy/p/10594511.html
Copyright © 2020-2023  润新知