C++面向对象-16-关系运算符的重载

继续学习运算符的重载,这篇学习关系运算符的重载。所谓关系运算符就是(<, >, != , ==),就是两个对象比对的关系,一般就是相等,不相等,数值还有大于或者小于。如果是基本数据类型,数值型的话,编译器已经实现。我们要做的事情就是,比较两个自定义对象的关系。

 

1.自定义对象的比对关系

例如有一个Person类,类有成员变量age和name,有两个Person类的对象,p1 , p2,我们想知道 p1 和p2是否相等

#include <iostream>
using namespace std;
#include <string>

class Person
{
public:
    
    int m_Age;
    string m_Name;

    Person(string name, int age)
    {
        m_Name = name;
        m_Age = age;
    }
 
};

void test01()
{
    Person p1("张三", 18);
    Person p2("李四", 18);
   
    cout << "p1和p2是否相等: " << endl;

}

int main()
{
    test01();
    system("pause");
    return 0;
}

当前这段代码是无法告诉我们,两个自定义对象p1和p2是否相等。

 

2.实现关系运算符重载

我们需要指定规则,例如只要name和age都相同的情况下,才认为这两个对象是相等,所以需要类里面写一个成员函数来实现关系运算符重载。

#include <iostream>
using namespace std;
#include <string>

class Person
{
public:
    
    int m_Age;
    string m_Name;

    Person(string name, int age)
    {
        m_Name = name;
        m_Age = age;
    }

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

void test01()
{
    Person p1("张三", 18);
    Person p2("张三", 18);
    
    if (p1 == p2)
    {
        cout << "p1和p2相等: " << endl;
    }
    else
    {
        cout << "p1和p2不相等: " << endl;
    }
    
}

int main()
{
    test01();
    system("pause");
    return 0;
}

这里实现了关系运算符==的重载,当然根据这个思路,也可以实现关系运算符!=的实现。很容易能实现下面!=的重载代码

    // != 运算符重载
    bool operator!=(Person &p)
    {
        if (this->m_Name != p.m_Name || this->m_Age != p.m_Age)
        {
            return true;
        }
        return false;
    }

或者这段代码

    // != 运算符重载
    bool operator!=(Person &p)
    {
        if (this->m_Name == p.m_Name && this->m_Age == p.m_Age)
        {
            return false;
        }
        return true;
    }

 

3.函数调用运算符重载

什么是函数调用运算符呢,例如我们main方法中test01() 这里就发生了调用,所以函数调用符号就是(),也就是小括号。函数调用运算符()也可以重载。由于重载后使用的方式非常像函数的调用,因此成为仿函数。仿函数没有固定写法,非常灵活。

#include <iostream>
using namespace std;
#include <string>

class MyPrint
{

public:
    // 重载函数调用运算符
    void operator()(string text)
    {
        cout << text << endl;
    }
};

int main()
{
    MyPrint print;
    print("Hello World!!");
    system("pause");
    return 0;
}

运行结果

上面第19行代码由于看起来非常像函数调用,所以这种函数调用运算符叫做仿函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值