重载关系运算符

在C++中,运算符是可以重载的,本次讲解的是如何重载关系运算符,具体想实现的效果为比较同一个类的不同对象是否相等
想要比较类就要先创建类

class Person
{
public:
    Person(string name,int age) : m_Name(name) , m_Age(age)
    {
    }
    string m_Name;
    int m_Age;
};

创建一个名为Person的类,在声明为公共的区域中,创建两个值,一个是string类型的名称,另一个是int类型的年龄,在命名之前加上m_是为了防止重名与便于区分
然后开始重载,如果直接自己写一个类似的方法用于实现关系判断的效果,那么方法应该为,注:此为类的成员方法

bool operator(Person& p) {
    if (p.m_Name == this->m_Name && p.m_Age == this->m_Age)
    {
        return true;
    }
    return false;
}

即创建一个返回值类型为bool类型的方法,它的名字是operator,然后它有一个参数,被比较的类的引用,然后分别判断调用该方法的类的成员属性与被比较的类的成员属性是否相等,是就返回true,否则返回false即可
调用的写法就是

Person p1("song",18), p2("song", 18);
p1.operator(p2)

这已经离预想的效果 p1 = p2较为接近了,C++中,可以通过重载关系运算符来实现这个效果

bool operator==(Person& p) {
    if (p.m_Name == this->m_Name && p.m_Age == this->m_Age)
    {
        return true;
    }
    return false;
}

重载的写法是 返回值 operator重载的运算符(参数){};
调用的写法

p1.operator==(p2);//正常写法
p1 == p2; //简化写法

这样就实现了比较两个类是否相等
上文是成员函数的写法,局限在某个类中,下面写一下全局函数的写法

bool operator==(Person&p1, Person&p2) {
    if (p1.m_Name == p2.m_Name && p1.m_Age == p2.m_Age)
    {
        return 1;
    }
    return 0;
}

调用的写法与前文相同,都可以实现 p1 == p2的判断
注意事项: 运算符重载方法的参数不能全部由基本数据类型构成,为了防止基本数据类型之间的计算被重载而导致的未知错误,但可以有部分基本数据类型与部分对象构成
运算符重载方法允许被再次重载,但必须符合方法重载的规定

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值