首页 > 其他分享 >运算符重载

运算符重载

时间:2022-09-21 20:24:25浏览次数:63  
标签:p2 temp int 运算符 Person 重载

运算符重载

一、加号重载运算符

- 实现两个自定义数据进行相加

class Person {
public:
    Person() {};
    Person(int a, int b)
    {
        this->m_A = a;
        this->m_B = b;
    }
    //成员函数实现 + 号运算符重载
    Person operator+(const Person& p) {
        Person temp;
        temp.m_A = this->m_A + p.m_A;
        temp.m_B = this->m_B + p.m_B;
        return temp;
    }


public:
    int m_A;
    int m_B;
};

//全局函数实现 + 号运算符重载
//Person operator+(const Person& p1, const Person& p2) {
//    Person temp(0, 0);
//    temp.m_A = p1.m_A + p2.m_A;
//    temp.m_B = p1.m_B + p2.m_B;
//    return temp;
//}

//运算符重载 可以发生函数重载 
Person operator+(const Person& p2, int val)  
{
    Person temp;
    temp.m_A = p2.m_A + val;
    temp.m_B = p2.m_B + val;
    return temp;
}

void test() {

    Person p1(10, 10);
    Person p2(20, 20);

    //成员函数方式
    Person p3 = p2 + p1;  //相当于 p2.operaor+(p1)
    cout << "mA:" << p3.m_A << " mB:" << p3.m_B << endl;


    Person p4 = p3 + 10; //相当于 operator+(p3,10)
    cout << "mA:" << p4.m_A << " mB:" << p4.m_B << endl;

}

int main() {

    test();

    system("pause");

    return 0;
}

二、左移运算符重载

class Person {
    friend ostream& operator<<(ostream& out, Person& p);

public:

    Person(int a, int b)
    {
        this->m_A = a;
        this->m_B = b;
    }

    //成员函数 实现不了  p << cout 不是我们想要的效果
    //void operator<<(Person& p){
    //}

private:
    int m_A;
    int m_B;
};

//全局函数实现左移重载
//ostream对象只能有一个
ostream& operator<<(ostream& out, Person& p) {
    out << "a:" << p.m_A << " b:" << p.m_B;
    return out;
}

void test() {

    Person p1(10, 20);

    cout << p1 << "hello world" << endl; //链式编程
}

int main() {

    test();

    system("pause");

    return 0;
}

三、递增运算符重载

class MyInteger {

    friend ostream& operator<<(ostream& out, MyInteger myint);

public:
    MyInteger() {
        m_Num = 0;
    }
    //前置++
    MyInteger& operator++() {
        //先++
        m_Num++;
        //再返回
        return *this;
    }

    //后置++
    MyInteger operator++(int) {
        //先返回
        MyInteger temp = *this; //记录当前本身的值,然后让本身的值加1,但是返回的是以前的值,达到先返回后++;
        m_Num++;
        return temp;
    }

private:
    int m_Num;
};


ostream& operator<<(ostream& out, MyInteger myint) {
    out << myint.m_Num;
    return out;
}


//前置++ 先++ 再返回
void test01() {
    MyInteger myInt;
    cout << ++myInt << endl;
    cout << myInt << endl;
}

//后置++ 先返回 再++
void test02() {

    MyInteger myInt;
    cout << myInt++ << endl;
    cout << myInt << endl;
}

int main() {

    test01();
    //test02();

    system("pause");

    return 0;
}

在递增重载运算符当中,需要注意前置递增和后置递增的区别

前置递增:MyInteger& operator++()

后置递增: MyInteger operator++(int)

而且目前不是很懂后置递增中,参数为什么是int?

 

标签:p2,temp,int,运算符,Person,重载
From: https://www.cnblogs.com/henabo/p/16716999.html

相关文章

  • java 动手动脑 方法重载
    如下代码://MethodOverload.java//UsingoverloadedmethodspackageHJssss;publicclasszhuce{ publicstaticvoidmain(String[]args){ System.out.printl......
  • 位运算符——三元运算符
      位:bit 三元表达式!条件表达式?表达式1:表达式2;若为真,执行表达式1若为假,执行表达式2例子:↓inta=10;intb=99;intres=a>b?a++:b--;运算结果:1......
  • 赋值运算符
        交换数,借助临时变量 intc=3;c+=4;//等价于c=c+4; ==> c=7; 特点:1.运算顺序从右到左2.赋值运算符的左边,只能是变量;;右边可以......
  • 逻辑运算符
      假设变量A=1,变量B=0,则存在途中实例。切记:真为1,假为0。    ......
  • 关系运算符
      非零为真(true),零为假(false)关系运算符的结果要么是1要么是0。 区分“=”赋值“==”等于a>b:称为关系表达式。例子:#include<stdio.h>voidmain(){inta......
  • Java基础08 自增自减运算符、初识Math类
    publicstaticvoidmain(String[]args){//++--自增自减一元运算符inta=3;intb=a++;//执行完这行代码后,先给b赋值,再自......
  • Java基础07 基本运算符
    运算符◆Java语言支持如下运算符:算术运算符:+,-,*,/,%,++,-赋值运算符=关系运算符:>,<,>=,<=,==,!=instanceof逻辑运算符:&&,||,!位运算符:&,|,^,~,>>,<<,>>>了解......
  • 重载和重写的区别?
    一、定义上的区别:重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。覆盖(也叫重写)是指在派生类中重新对基......
  • javascript中的运算符
     重点看带星号的1、===严格相等运算符,用作逻辑判断,为什么不用==呢? 第二条1=='1',解释器会将'1'转化称数字1然后再比较,结果就是true而第三条就是从类型和数值上比较......
  • 3.运算符
    运算符算数运算符赋值运算符复合赋值运算符⽐较运算符逻辑运算符算数运算符符号描述实例+加print(1+1)输出结果为2-减print(1-1)输出结果为0......