本文内容来自于对狄泰学院 唐佐林老师 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 类内’ +‘ 操作符重载成功
- 如果程序中同时存在友元属性的全局操作符重载函数和类内的操作符重载函数,程序会调用哪一个操作符重函数呢,我们撤销友元属性的全局操作重载函数的注释,并在两个函数中加入打印信息

运行结果

实验现象,程序调用了类的成员函数中的操作符重载函数,说明当全局函数和类内的成员函数同时存在操作符重载的时候,优先调用类的成员函数
小结
操作符重载 是 C++ 的强大特性之一
操作符重载的 本质 是通过函数扩展操作符的功能
operator 关键字是实现操作符重载的关键
操作符重载遵循 相同的 函数重载规则
全局函数 和 成员函数 都可以实现对操作符的重载
本文深入解析C++操作符重载的概念与实践,包括重载的本质、语法及其实现方式,通过实例演示如何使用操作符重载扩展类的功能。

被折叠的 条评论
为什么被折叠?



