C++:运算符重载

C++:运算符重载

一、+号运算符重载

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

class Person
{
    friend Person operator+(const Person& p1, const Person& p2);
public:
    Person(){};
    Person(int var1, int var2): m_var01(var1), m_var02(var2){};
    
    // 运算符重载可实现函数重载
	Person operator+(const int& num)
	{
		Person tmp;
		tmp.var01 = this->var01 + num;
		tmp.var02 = this->var02 + num;
		return tmp;
	}

    void Show() const
	{
		cout<<"var01 = "<<this->var01<<endl;
		cout<<"var02 = "<<this->var02<<endl;
	}

private:
	int m_var01;
	int m_var02;
};

// 利用全局函数实现运算符重载
Person operator+(const Person& p1, const Person& p2)
{
	Person tmp;
	tmp.var01 = p1.var01 + p2.var01;
	tmp.var02 = p1.var02 + p2.var02;
	return tmp;
}

// 利用全局函数实现运算符重载
void test01()
{
	Person p1(10, 10);
	Person p2(20, 20);
	// 简化模式调用
	Person p3 = p1 + p2; // 本质模式调用 Person p3 = operator+(p1, p2);
	p3.Show();
}

// 运算符重载可同时发生函数重载
void test02()
{
	Person p1(10, 20);
    // 简化模式调用
	Person p2 = p1 + 20; // 本质模式调用 Person p2 = p1.operator+(20);
	p2.Show();
}

int main()
{
    test01();
    test02();
    return 0;
}

二、<<运算符重载

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

//左移运算符(<<)须用全局函数实现
class Person
{
    friend ostream& operator<<(ostream& cout, const Person& p);
public:
    Person(){};
    Person(int ivar01, int ivar02): var01(ivar01), var02(ivar02){};

private:
    int var01;
    int var02;
};

ostream& operator<<(ostream& cout, const Person& p)
{
    cout<<"Person.var01 = "<<p.var01<<endl;
    cout<<"Person.var02 = "<<p.var02<<endl;
    return cout;
}

int main()
{
	Person p1(10, 20);
	Person p2(100, 200);
	cout<<p1<<p2<<endl;
    return 0;
}

二、++运算符重载(前置和后置)

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

class UserInt
{
    friend ostream& operator<<(ostream& cout, const UserInt& num);
public:
    UserInt()
    {
        this->number = 0;
    }
    UserInt(int inumber): number(inumber){};

    // 前置++无须传参,后置++须一个占位符占位以表示其为后置++

    // 前置++返回值是引用。因此前置++效率高于后置++。
    UserInt& operator++()
    {
        ++this->number;
        return *this;
    }

    // 函数参数传入int占位符,系统自行判断为后置++。返回的是值。
    UserInt operator++(int)
    {
        UserInt tmp = *this;
        ++this->number;
        return tmp;
    }

private:
    int number;
};

ostream& operator<<(ostream& cout, const UserInt& num)
{
    cout<<num.number;
    return cout;
}

int main()
{
	UserInt num01;
	cout<<++num01<<endl;
	cout<<num01<<endl;
	UserInt num02 = 20;
	cout<<num02++<<endl;
	cout<<num02<<endl;
  return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值