zoukankan      html  css  js  c++  java
  • 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 操作符(形参表)
    {
        //函数体
    }
     
    类成员实现操作符重载需要的形式参数比原来少一个,这比如:利用类成员函数实现一元操作符”-“,就不需要参数了。
    也正是因为这个原因,友元函数实现的操作符重载是有限制的,
    比如下标[] ,调用(),成员指向-> 复制=  等不能利用友元函数实现运算符的重载。
     
    在实际开发过程中,单目运算符建议重载为成员函数,而双目运算符建议重载为友元函数。
    通常下双目运算符重载为友元函数比重载为成员函数更方便,但是有时双目运算符必须重载为成员函数,例如赋值运算符=。
    还有如果需要修改对象内部的状态,一般可以选择利用类成员函数进行修改。
     
     
     
     





  • 相关阅读:
    Java 线程间通信 —— 等待 / 通知机制
    Java 线程基础
    Java 内存模型
    Java 并发机制底层实现 —— volatile 原理、synchronize 锁优化机制、原子操作
    优秀程序员的博客有哪些?
    程序员五一被拉去相亲,结果彻底搞懂了HTTP常用状态码
    【Redis破障之路】三:Redis单线程架构
    【Redis破障之路】一:强大的Redis
    MySQL提升笔记(4)InnoDB存储结构
    MySQL提升笔记(3)日志文件详解
  • 原文地址:https://www.cnblogs.com/gt123/p/3448142.html
Copyright © 2011-2022 走看看