10.3 C++运算符重载实现的过程,代码

目录

运算符重载背景(operator)

定义

重载的方法

不能重载的运算符

运算符重载注意事项

代码实现

运行结果


运算符重载背景(operator)

自定义的类中,系统默认只提供两个运算符供用户使用,分别是赋值运算符(=)和取地址运算符(&),其余运算符只使用用基本数据类型,对于构造数据类型而言,不可直接使用,除非将该运算符进行重载操作.

定义

运算符重载是静态多态的一种,能够实现"一符多用",使用运算符重载,能够完成运算符作用于类对象之间,使得代码更加简洁、可读性更强。

重载的方法

operator# (#表示运算符号)

不能重载的运算符

1> 成员运算符 .

2> 成员指针运算符 .*

3> 作用域限定符 ::

4> 求字节运算符 sizeof

5> 三目运算符 ?:

运算符重载注意事项

1> 运算符重载,不能改变运算符的优先级

2> 运算符重载,不能改变运算符操作数个数

3> 运算符重载,不能更改运算符的本质逻辑,如不允许在加法运算符重载函数中,实现加法

4> 运算符重载,不能自己造运算符,是在已有的运算符的基础上进行重载操作

5> 运算符重载,不能改变运算符的结合律

6> 运算符重载,一般不设置默认参数

代码实现
cpp 复制代码
#include <iostream>

using namespace std;
//定义一个复数类
class Complex
{
private:
    int real; //实部
    int vir;  //虚部
public:
    Complex(){}
    Complex(int r,int v):real(r),vir(v){}

    //定义展示函数
    void show()
    {
        if(vir>=0)
        {
            cout<<real<<" + "<<vir<<"i"<<endl;
        }else
        {
            cout<<real<<vir<<"i"<<endl;
        }
    }
    //成员函数版实现减法(-)运算符重载
    const Complex operator- (const Complex &R)
    {
        Complex c;
        c.real=this->real-R.real;
        c.vir=this->vir-R.vir;
        return c;
    }
    //重载:+=  实部+=实部 虚部+=虚部
    Complex & operator+=(const Complex &R)
    {
        this->real+=R.real;
        this->vir+=R.vir;
        return *this;
    }
  //重载:-=
    Complex & operator-=(const Complex &R)
    {
        this->real-=R.real;
        this->vir-=R.vir;
        return *this;
    }
     //重载中括号[]运算符
    int & operator[](int index)
    {
        if(index==0)
        {
            return real;
        }
        else if(index==1)
        {
            return vir;
        }
    }


    //重载前置自增运算符重载函数:实部 = 实部+1   虚部=虚部+1
    Complex &operator++()
    {
        ++this->real;
        ++this->vir;

        return *this;
    }
    //重载后置自增运算符重载函数:实部 = 实部+1   虚部=虚部+1
    Complex operator++(int)
    {
        Complex c;

        c.real = this->real++;
        c.vir = this->vir++;

        return c;
    }

};
int main()
{
    Complex c1(5,3);
    Complex c2(2,1);
    c1.show();    //测试

    Complex c3=c1-c2;
    c3.show();

    Complex c4=c1+=c2;   //测试+=
    c4.show();

    Complex c5=c1-=c2;
    c5.show();

    c5[0]=10;        //将实部参数进行修改
    c5.show();

    Complex c6=++c1;   //测试自增
    c6.show();
    Complex c7=c2++;;
    c7.show();
    return 0;
}
运行结果
相关推荐
葡萄城技术团队3 分钟前
InfluxDB 2\.x 深度解析:核心架构、Flux 函数与制造业落地指南(三)
java·开发语言·架构
counting money6 分钟前
Java IO流详解:从InputStream到文件操作实战
java·开发语言·python
wuyk55529 分钟前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无1 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
波特率1152001 小时前
C++新特性---属性说明符与标准属性
开发语言·c++
程序员小八7771 小时前
上海百度B端java后端日常实习一面
java·开发语言
wp123_11 小时前
IPX8 防水 Type‑C连接器:安费诺 124018792112A 与 TONEVEE TY48087‑24A 技术梳理
c语言·开发语言
不会代码的小猴1 小时前
3. 控件学习1
开发语言·c++·笔记·qt·算法
fangzhanpeng1682 小时前
(前端)2.js变量作用域样例
开发语言·前端·javascript
mqiqe4 小时前
线程调度与 Schedulers:Project Reactor 并发模型的核心引擎
java·开发语言·网络