第30课 操作符重载的概念

本文深入解析C++操作符重载的概念与实践,包括重载的本质、语法及其实现方式,通过实例演示如何使用操作符重载扩展类的功能。
本文内容来自于对狄泰学院 唐佐林老师 C++深度解析 课程的学习总结

操作符重载

  • C++ 中的 重载 能够 扩展操作符的功能
  • 操作符的重载 以函数的方式进行
  • 本质:
    • 特殊形式的 函数扩展操作符的功能
  • 通过 operator 关键字可以定义 特殊的函数
  • operator 的本质是 通过函数重载操作符
  • 语法:
    在这里插入图片描述
实验编程

根据上面的 重载操作符 语法,编写一个函数重载 ‘+’ 操作符,实现对象的相加

#include <stdio.h>


class Test
{
private:
    int a;
    int b;
public:
    Test();
    Test(int a, int b);
    int getA();
    int getB();
    friend Test operator + (const Test& t1, const Test& t2);
};


Test::Test()
{

}

int Test::getA()
{
    return a;
}

int Test::getB()
{
    return b;
}

Test::Test(int a, int b)
{
    this->a = a;
    this->b = b;
}


Test operator + (const Test& t1, const Test& t2)
{
    Test ret;

    ret.a = t1.a + t2.a;
    ret.b = t1.b + t2.b;

    return ret;
}



int main()
{
    Test t1(1, 2);
    Test t2(3, 4);

    Test t3 = operator+(t1, t2);

    printf("t3.a = %d\n", t3.getA());
    printf("t3.b = %d\n", t3.getB());


    return 0;
}

运行结果
在这里插入图片描述

实验结果:运行结果达到预期,对象 t3 成员 a的值等于 对象 t1的a值加对象t2的a值
                  对象t3 成员 b 的值等于对象 t1的b值 加上 对象 t2 的b值

在这里插入图片描述
上面的代码我们使用了友元函数,友元函数破坏了类的封装性,让全局函数强制访问类的私有成员。所以,我们可以请 操作符重载函数 定义为类的 成员函数

  • 语法:
    在这里插入图片描述
实验编程

1.我们在上面代码 Test 类中增加 ‘+’ 操作符重载函数,屏蔽友元全局 ‘+’ 操作符重载函数
在这里插入图片描述
运行结果
在这里插入图片描述

发现达到同样的效果,Test 类内’ +‘ 操作符重载成功

  1. 如果程序中同时存在友元属性的全局操作符重载函数和类内的操作符重载函数,程序会调用哪一个操作符重函数呢,我们撤销友元属性的全局操作重载函数的注释,并在两个函数中加入打印信息
    在这里插入图片描述
    运行结果
    在这里插入图片描述

实验现象,程序调用了类的成员函数中的操作符重载函数,说明当全局函数和类内的成员函数同时存在操作符重载的时候,优先调用类的成员函数




小结

操作符重载 是 C++ 的强大特性之一
操作符重载的 本质 是通过函数扩展操作符的功能
operator 关键字是实现操作符重载的关键
操作符重载遵循 相同的 函数重载规则
全局函数 成员函数 都可以实现对操作符的重载



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzg2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值