• 7--操作符重载(1)


    (1)操作符重载意义
    对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,
    对于用户自己定义的class,如果想要支持基本操作,比如比较大小,判断是否相等,等等。
    则需要用户自己来定义关于这个操作符的具体实现。

     
    (2)重载操作符的定义格式
    定义一个重载操作符和定义一个函数,不过函数的名字的关键字operator
    后面接要定义的操作符号,定义格式:
    返回类型  operator操作符(参数列表) 
    (3)可重载的操作符
    在C++中几乎所有的操作符都可以重载,不过也是有几个是不可以重载的。
    四个不可以重载的操作符
    成员访问运算符.    作用域运算符::  长度运算符sizeof  条件运算符 ?:   
     
    (4)运算符重载的原则
    1.C++中只能对已有的C++运算符进行重载,不允许用户自己定义新的运算符。
    2.运算符重载后不能改变运算符的操作对象(操作数)的个数。如:"+"是实现两个操作数的运算符,重载后仍然为双目运算符。
    3.重载不能改变运算符原有的优先级和原有的结合性。
    4.运算符重载不能全部是C++中预定义的基本数据,这样做的目的是为了防止用户修改用于基本类型数据的运算符性质。
     
    (5)两种实现方式
    class 类名
    {
        friend 返回类型 operator 操作符(形参表);
    };
    //类外定义格式:
    返回类型 operator操作符(参数表)
    {
        //函数体
    }
    class 类名
    {
    public:
        返回类型 operator 操作符(形参表);
    };
    //类外定义格式
    返回类型 类名::operator 操作符(形参表)
    {
        //函数体
    }
     
    类成员实现操作符重载需要的形式参数比原来少一个,这比如:利用类成员函数实现一元操作符”-“,就不需要参数了。
    也正是因为这个原因,友元函数实现的操作符重载是有限制的,
    比如下标[] ,调用(),成员指向-> 复制=  等不能利用友元函数实现运算符的重载。
     
    在实际开发过程中,单目运算符建议重载为成员函数,而双目运算符建议重载为友元函数。
    通常下双目运算符重载为友元函数比重载为成员函数更方便,但是有时双目运算符必须重载为成员函数,例如赋值运算符=。
    还有如果需要修改对象内部的状态,一般可以选择利用类成员函数进行修改。
     
     
     
     





  • 相关阅读:
    FFmpeg源码分析:avcodec_find_decoder
    FFmpeg源码分析:解码器流程
    05Linux网络编程基础 ---- 定时器
    04Linux网络编程基础 ---- 信号
    03Linux网络编程基础 ---- IO复用
    SRS流媒体服务器04 ---- st-thread框架
    react-render()
    react开发学习
    php代码运行提速的20个小技巧(转)
    Symfony2 资料篇
  • 原文地址:https://www.cnblogs.com/gt123/p/3448142.html
Copyright © 2020-2023  润新知