【带头学C++】----- 九、类和对象 ---- 9.13 运算符重载——(9.13.7-9.13.8)

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️创做不易,麻烦点个关注❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

❤️❤️❤️❤️❤️❤️❤️❤️❤️文末有惊喜!献舞一支!❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

目录

9.13.7重载==运算符符(成员函数实现 推荐)

9.13.8重载++/--运算符


9.13.7重载 == 运算符符(成员函数实现 推荐)

当我们想要实现下面这样的关系时,实现对象的比较判断是否相等的情况;

【带头学C++】----- 九、类和对象 ---- 9.13 运算符重载——(9.13.7-9.13.8)_第1张图片

 此时可以考虑使用类内部的成员函数实现,第一类Jery只需要掉用这个函数,传一个对象Tom进来,然后进行比较就可以了。

【带头学C++】----- 九、类和对象 ---- 9.13 运算符重载——(9.13.7-9.13.8)_第2张图片

结果:

不相等结果测试:

【带头学C++】----- 九、类和对象 ---- 9.13 运算符重载——(9.13.7-9.13.8)_第3张图片

相等情况测试:

【带头学C++】----- 九、类和对象 ---- 9.13 运算符重载——(9.13.7-9.13.8)_第4张图片

 

9.13.8重载++/--运算符

        重载的++和--运算符有点让人不知所措,因为我们总是希望能根据它们出现在所作用对象的前面还是后面来调用不同的函数。解决办法很简单,例如当编译器看到++a(前置++),它就调用operator++(a),当编译器看到a++ (后置++),它就会去调用operator++(a,int).

        ++a(前置++),它就调用operator++(a),
        a++ (后置++),它就会去调用operator++(a,int)
        --a(前置--),它就调用operator--(a)
        a-- (后置--),它就会去调用operator--(a,int)

 案例一:重载后置    ob++

类名  operator++(int)

{

        //先保存 旧值

        //自增++

        return old;//返回旧值

}

 要实现   Tom = Jery++?

【带头学C++】----- 九、类和对象 ---- 9.13 运算符重载——(9.13.7-9.13.8)_第5张图片 

 

【带头学C++】----- 九、类和对象 ---- 9.13 运算符重载——(9.13.7-9.13.8)_第6张图片

  案例二:重载前置   ++ob

类名  operator++()    //没有形参,this指针已经有了

{

        //自增++

        return *this;

}

同上案例一大同小异:实现 Tom = ++ Jery;

【带头学C++】----- 九、类和对象 ---- 9.13 运算符重载——(9.13.7-9.13.8)_第7张图片

 【带头学C++】----- 九、类和对象 ---- 9.13 运算符重载——(9.13.7-9.13.8)_第8张图片

结果: 

【带头学C++】----- 九、类和对象 ---- 9.13 运算符重载——(9.13.7-9.13.8)_第9张图片 

完整代码:

#include 
#include 
#include "arrays.h"

using namespace std;


class Person
{
    friend ostream& operator<<(ostream &out,Person ob);
    friend istream& operator>>(istream &in,Person &ob);
    //friend Person operator+(Person &ob1,Person &ob2);
private:
    int num;
    string name;
    float score;
public:
    Person(){}
    Person(int num,string name,float score):num(num),name(name),score(score){}
    //成员函数实现重载加法运算符
    Person operator+(Person &ob)
    {
        Person tmp;
        tmp.num = num + ob.num;
        tmp.name = name + ob.name;
        tmp.score = score + ob.score;
        return tmp;
    }
    //成员函数重载==运算符
    bool operator== (Person &ob){
        if(num==ob.num && name==ob.name && score == ob.score)
            return true;
        return false;
    }
    //重载后置++
    Person operator++(int){
        //保存旧值
        Person old = *this;
        //++
        this->num++;
        this->name= this->name+this->name;
        this->score++;
        //返回旧值
        return old;
    }

    //重载前置++
    Person operator++(){
        //++
        this->num++;
        this->name= this->name+this->name;
        this->score++;
        //返回旧值
        return *this;
    }

};
//全局函数重载operator<< 输出运算符
ostream& operator<<(ostream &out,Person ob){
    out<> 输入运算符
istream& operator>>(istream &in,Person &ob){
    in>>ob.num>>ob.name>>ob.score;
    return in;
}
/*
全局函数重载+运算符
//Person operator+(Person &ob1,Person &ob2){
//    Person tmp;
//    tmp.num   = ob1.num+ob2.num;
//    tmp.name  = ob1.name+ob2.name;
//    tmp.score = ob1.score+ob2.score;
//    return tmp;
//}
*/
int main()
{
    Person Jery{101,"Jery",99.9f};
    Person Tom;

    Tom = ++Jery;
    cout< Jery.operator+(Tom)
    //cout<

 + 收 +

❤️您的支持❤️是我最大的动力❤️相互学习❤️共同进步❤️一起搞钱❤️动动发财的小手❤️

  ⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️十星好评,Erike的专用模板⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️ 

什  么 ?您  要  打  赏 ?谢    谢    老   板!老    板    大    气! 
 

 

你可能感兴趣的:(C++从基础到抗大旗,c++,开发语言,设计模式,单例模式,算法,面试,c语言)