c++ 基础知识-类和对象-运算符重载1

c++ 基础知识-类和对象-运算符重载1,第1张

c++ 基础知识-类和对象-运算符重载 1.加法运算符重载
#include   
#include   
using namespace std;

class Person
{
public:
	//构造函数
	Person();
	//析构函数
	~Person();
	//error C2673: “operator +”: 全局函数没有“this”指针
	//重载加法运算符1
	//Person operator+(const Person &p)
	//{
	//	Person temp;
	//	temp .m_A = this->m_A + p.m_A;
	//	return temp;
	//}

public:
	int m_A;
};

Person::Person()
{
	m_A = 10;
}

Person::~Person()
{
	cout<<" ~Person() 析构函数 "<<endl;
}

//重载加法运算符2
Person operator+(const Person &p1,const Person &p2)
{
	Person temp;
	temp .m_A = p1.m_A + p2.m_A;
	return temp;
}

void fun()
{
	Person p1;
	Person p2;
	//Person p3 = p1.operator+(p2);//第一种显式调用方式
	Person p4 = p2 + p2;//第一种隐式调用方式
	cout<<"p1 m_A : "<<p1.m_A<<endl;
	cout<<"p2 m_A : "<<p2.m_A<<endl;
	//cout<<"p3 m_A : "<
	cout<<"p4 m_A : "<<p4.m_A<<endl;
	//输出
	//~Person() 析构函数
	//	p1 m_A : 10
	//	p2 m_A : 10
	//	p3 m_A : 20
	//	~Person() 析构函数
	//	~Person() 析构函数
	//	~Person() 析构函数
}

int main()
{
	//特别注意这种调用方式,类和调用都写在main函数外面,main内部只写一些简单的
	fun();
	return 0;
}  
2.左移运算符 重载左移运算符结合友元可以实现自定义输出
#include   
#include   
using namespace std;

class Person
{
	//友元函数
	friend ostream & operator<<(ostream &cout, Person &p);
public:
	//构造函数
	Person();
	//析构函数
	~Person();

private:
	int m_A;
};

Person::Person()
{
	m_A = 10;
}

Person::~Person()
{
	cout<<" ~Person() 析构函数 "<<endl;
}

//重载左移运算符
ostream & operator<<(ostream &cout, Person &p)//ostream 输出
{
	cout<<p.m_A;
	return cout;//返回ostream
}

void fun()
{
	Person p1;
	cout<<p1<<endl;
}

int main()
{
	//特别注意这种调用方式,类和调用都写在main函数外面,main内部只写一些简单的
	fun();
	return 0;
}  
3.递增运算符 后置递增运算符先调用当前值,之后对当前值进行递增运算 前置递增运算符先进行递增运算,然后返回的是递增之后的值
#include   
#include   
using namespace std;

class Int
{
	//友元
	friend ostream& operator<<(ostream &cout, Int  &p);

public:
	Int();//构造函数
	~Int();//析构函数

	//前置++ 返回引用
	Int& operator++()
	{
		m_Int ++;
		return *this;
	}

	//后置++ 返回值
	Int operator++(int)
	{
		Int temp = *this;
		temp.m_Int ++;
		return temp;
	}

private:
	int m_Int;
};

Int::Int()
{
	m_Int = 0;//初始化
}

Int::~Int()
{
	cout<<"析构函数"<<endl;//初始化
}

//重载左移运算符
ostream& operator<<(ostream &cout, Int  &p)//ostream 输出
{
	cout<<p.m_Int;
	return cout;//返回ostream
}

void fun1()
{
	Int p;
	cout<<++p<<endl;
	cout<<++p<<endl;
	cout<<p<<endl;
}
 
void fun2()
{
	Int p;
	cout<<p++<<endl;
	cout<<p++<<endl;
	cout<<p++<<endl;
}

int main()
{
	//特别注意这种调用方式,类和调用都写在main函数外面,main内部只写一些简单的
	fun1();
	cout<<"-----------------------------------"<<endl;
	fun2();

	//输出
	//1
	//2
	//2
	//析构函数
	//-----------------------------------
	//析构函数
	//1
	//析构函数
	//析构函数
	//1
	//析构函数
	//1
	//析构函数

	return 0;
}  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1295821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存