初学者的C++11学习:深入理解operator

总体内容学习自: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”;
  • =、()、[]、-> 操作符只能被类的成员函数重载

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值