总体内容学习自:B站爱编程的大丙
/*
版权声明:本文为CSDN博主「liitdar」的原创文章
原文链接:https://blog.csdn.net/liitdar/article/details/80654324
一、复习一下operator
1.operator 是 C++ 的一个关键字,它和运算符(如 =)一起使用,表示一个运算符重载函数,在理解时可将 operator 和待重载的运算符整体(如 operator=)视为一个函数名。
实现运算符重载的方式通常有以下两种:
(1)运算符重载实现为类的成员函数;
(2)运算符重载实现为非类的成员函数(即全局函数)。
实例:
类的成员函数
class test6
{
private:
int age;
public:
test6(int nAge)
{
this->age = nAge;
}
bool operator==(const test6& ps)
{
if (this->age == ps.age)
{
return true;
}
return false;
}
};
int main()
{
test6 a1(10);
test6 b1(10);
if (a1 == b1)
{
cout << "a1 is equal with b1." << endl;
}
else
{
cout << "a1 is not equal with b1." << endl;
}
}
全局函数
class test6
{
public:
int age;
};
// 左操作数的类型必须被显式指定
// 此处指定的类型为test6类
bool operator==(test6 const& p1 ,test6 const& p2)
{
if (p1.age == p2.age)
{
return true;
}
else
{
return false;
}
}
int main()
{
test6 a1;
test6 b2;
p1.age = 18;
p2.age = 18;
if (a1 == b2)
{
cout << "a1 is equal with b2." << endl;
}
else
{
cout << "a1 is NOT equal with b2." << endl;
}
return 0;
}
3.运算符重载的方式选择
- 如果一个重载运算符是类的成员函数,那么那么只有当与它一起使用的左操作数是该类的对象时,该运算符才会被调用;而如果该运算符的左操作数确定为其他的类型,则运算符必须被重载为全局函数;
- C++ 要求'='、'[]'、'()'、'->'运算符必须被定义为类的成员函数,把这些运算符通过全局函数进行重载时会出现编译错误;
- 如果有一个操作数是类类型(如 string 类),那么对于对称操作符(比如操作符“==”),最好通过全局函数的方式进行重载。
4.运算符重载的规则
实现运算符重载时,需要注意以下几点:
- 重载后运算符的操作数至少有一个是用户定义的类型;
- 不能违反运算符原来的语法规则;
- 不能创建新的运算符;
- 有一些运算符是不能重载的,如“sizeof”;
- =、()、[]、-> 操作符只能被类的成员函数重载