c++关于符号重载

今天复习的主要内容是C++中的符号重载

+号的重载

在c++编译器中,加号被定义为数的相加,但是对于自己创建的内容,想进行相加,编译器的+号是不可以进行运算的,这时候就需要我们进行对加号+进行重新赋予新的意义,即运算符号的重载,


```cpp
#include<iostream>
using namespace std;
//但是现在我们定义了一个person类
class person
{
public:
	//有参构造函数进行赋初值
	person(int a,int b);
	//利用成员函数进行符号的重载
	person& operator+(person &p)
	{
		//创建person的临时变量temp
		person temp(0,0);
		temp.m_A=this->m_A+p.m_A;
		temp.m_B=this->m_B+p.m_B;
		return  temp;
	}
		//类中有两个成员
	int m_A;
	int m_B;
};
person::person(int a,int b)
{
	m_A=a;
	m_B=b;
}
void test01()
{
	//创建两个person的对象
	person p1(10,20);
	person p2(10,30);
	//在没有对+号运算符进行重载之前,这样的操作是行不通的
	//因此,我们对其进行重载
	person p3=p1+p2;
	//这样是不输出不了,这个问题需要一会介绍的左移运算符的重载有关
	//cout<<p3<<endl;
	cout<<p3.m_A<<endl;
	cout<< p3.m_B<<endl;
	
}
//还有一个是全局函数重载也是可以的;
void operator+(person &p1, person &p2)
{
	person temp(0,0);
	temp.m_A=p1.m_A+p2.m_A;
	temp.m_B=p1.m_B+p2.m_B;
}
int main()
{
	//正常的+号运算符,比如
	int a=10;
	int b=20;
	//cout<<a+b<<endl;
	//肯定运算出来的结果是30
	test01();
	system("pause");
	return 0;
	
}

<<左移运算符号的重载

上面的例子中出现了一个这样的问题:
person p3=p1+p2;
cout<<p3<<endl;
cout p3是不能输出的,所以,要对左移运算符进行重载
注意:在对左移运算符号进行重载的时候,是不能运用成员函数进行重载的,利用全局函数进行重载。

#include<iostream>
using namespace std;
//但是现在我们定义了一个person类
class person
{
public:
	//有参构造函数进行赋初值
	person(int a,int b);
	//利用成员函数进行符号的重载
	person& operator+(person &p)
	{
		//创建person的临时变量temp
		person temp(0,0);
		temp.m_A=this->m_A+p.m_A;
		temp.m_B=this->m_B+p.m_B;
		return  temp;
	}
		//类中有两个成员
	int m_A;
	int m_B;
};
person::person(int a,int b)
{
	m_A=a;
	m_B=b;
}
//对左移运算符号进行重载
//只要是person类的调用<<都可以进行输出
ostream & operator<<(ostream&cout,person &p)
{
	cout<<"p的m_A的值为"<<p.m_A<<endl;
	cout<<"p的m_A的值为"<<p.m_B<<endl;
	return cout;
}
void test01()
{
	//创建两个person的对象
	person p1(10,20);
	person p2(10,30);
	//在没有对+号运算符进行重载之前,这样的操作是行不通的
	//因此,我们对其进行重载
	person p3=p1+p2;
	cout<<p3<<endl;
	cout<<p3.m_A<<endl;
	cout<< p3.m_B<<endl;	
	//两个结果显然都是一样的;
}
//还有一个是全局函数重载也是可以的;
/*void operator+(person &p1, person &p2)
{
	person temp(0,0);
	temp.m_A=p1.m_A+p2.m_A;
	temp.m_B=p1.m_B+p2.m_B;
}*/
int main()
{
	test01();
	system("pause");
	return 0;

}

在这里插入图片描述

++递增运算符的重载

在C++中,a++和++a的运算都是加1的操作,但是
int a=10;
int b=10;
cout<<++a<<endl;
cout<<b++<<endl;
cout<<b<<endl;
的结果是不一样的,第一个结果是11,而第二个结果是10,第三个结果是11;
那么如果我定义一个自己的类型那么还能进行递增操作吗,根据上面的知识,显然是不可以的,这时我们就需要对递增运算进行重载,来满足我们对自己的类型进行递增或者递减的操作。
首先我定义一个类 myInteger

#include<iostream>
using namespace std;
class myInteger
{
	friend	ostream & operator<<(ostream &cout, myInteger &integer);
	friend void test01();//相当于用了全局函数做友元
	friend void test02();
public:
	//构造一个函数,对其进行赋值
	myInteger(int num)
	{
		m_num = num;
	}
	//利用成员函数对++进行重载
	myInteger& operator++()
	{
		m_num++;
		return *this;//返回的是调用对象的this所对应的值;
	}
	//后置递增运算的重载
	myInteger operator++(int)
	{
		//首先应该记录这个值的初始部分
		myInteger temp = *this;
		//再对这个值进行加+的操作
		m_num++;
		//最后返回这个未经操作的值
		return temp;
	}

private:
	//有一个成员m_num;
	int m_num = 0;
};
//全局函数对<<进行重载
ostream & operator<<(ostream &cout, myInteger &integer)
{
	cout << integer.m_num << endl;
	return cout;
}
void test01()
{
	myInteger integer(10);
	//此处还要进行<<的重载
	cout << integer << endl;
	//在对++运算符重载之前肯定是有问题的,利用成员函数对++进行重载
	cout << ++integer << endl;
}
void test02()
{
	myInteger integer2(20);
	cout << integer2 << endl;
	cout << integer2++ << endl;
}
int main()
{
	//test01();
	test02();
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值