栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++:有关操作符重载

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++:有关操作符重载

目录

前言 为什么需要重载操作符?作用以及意义是什么?

一、如何实现

1.重载  +   =

2.重载++

3.重载输入输出

4.重载=(深拷贝)

二、重载运算符应遵循的原则

总结



前言 为什么需要重载操作符?作用以及意义是什么?

操作符的重载可以让运算符作用于类类型的对象,而对于有些作用于对象的运算符,也可以在不改变含义的情况下自定义操作,那么为什么要这么做呢?很显然,它能非常方便地操作对象又不能保持其操作的含义明确。

重载运算符让运算符有新的语义,但绝对不是改变它的语法。

那么具体如何重载呢?


提示:以下是本篇文章正文内容,下面案例可供参考

一、如何实现

运算符重载函数的函数名由operator后面跟着要重载的运算符组成

格式如下

operatop( argument-list)

例如,operator+() 重载+运算符
   operator*()重载*运算符

下面请看几个小实例,大致了解一下

1.重载  +   =
#include 
using namespace std;

class Num
{
private:
	int m_Num;
public:
	int GetNum() const;
	int operator=(int n);
	int operator+(int n);
public:
	friend int operator+(int n, Num& num);
};
int Num::GetNum() const
{
	return m_Num;
}
int Num::operator=(int n)
{
	m_Num = n;
	return m_Num;
}
int Num::operator+(int n)
{
	return m_Num + 100;
}

int operator+(int n, Num& num)
{
	return n + num.m_Num;
}
int main()
{
	Num num1;
	Num num2;
	
	num2 = num1 = 100;

	cout << num1.GetNum() << endl;
	cout << num2.GetNum() << endl;

	cout << num1 + 100 << endl;
	cout << 100 + num1 << endl;
	system("pause");
	return 0;
}

2.重载++
#include 
using namespace std;


//int operator++(int n)  表示后置形式
class Num
{
public:
	int m_Num;
public:
	Num()
	{
		m_Num = 100;
	}
public:
	int operator++(int n);
	int operator++();
};
int Num::operator++(int n)
{
	int nMark = m_Num;
	m_Num++;
	return nMark;
}
int Num::operator++()
{
	return m_Num + 1;
}
int main()
{
	Num num;

	cout << num.m_Num << endl;
	cout << num++ << endl;
	cout << ++num << endl;

	system("pause");
	return 0;
}

3.重载输入输出
#include 
using namespace std;


class Num
{
private:
	int m_Num;
public:
	friend istream& operator>>(istream& is, Num& num);
	friend ostream& operator<<(ostream& os, Num& num);

};

istream& operator>>(istream& is, Num& num)
{
	is >> num.m_Num;
	return is;
}
ostream& operator<<(ostream& os, Num& num)
{
	os << num.m_Num;
	return os;
}
int main()
{

	Num num;
	cin >> num;

	cout << num << endl;
	return 0;
}

4.重载=(深拷贝)
#include 
using namespace std;


class Num
{
public :
	int* pNum;
public:
	Num();
	~Num();
	void Show();
	Num& operator=(Num& num);
};
Num::Num()
{
	pNum = new int(100);
}
Num::~Num()
{
	if (pNum != NULL)
	{
		delete pNum;
		pNum = NULL;
	}
}
void Num::Show()
{
	cout << *pNum << endl;
}
Num& Num::operator=(Num& num)
{
	if (this->pNum == NULL)
	{
		this->pNum = new int;
	}
	*this->pNum = *num.pNum;
	return *this;
}
int main()
{
	Num num1;
	Num num2;
	*num2.pNum = 200;
	num1 = num2;
	num1.Show();
	num2.Show();

	system("pause");
	return 0;
}

二、重载运算符应遵循的原则

重载的运算符本质来说是特殊的函数,因此它的参数数量应该和运算符作用的对象一样多,也就是说,一元运算符有一个参数,二元运算符有两个参数。

除此之外,最基本的要求是,重载的含义应该与运算符作用于内置类型时一样的含义。例如说,你不应该重载一个+,用于两个对象的的比较或者相减。


总结

(若放在类内实现就是类内的成员函数,若放在类外,和类无关,属于全局函数。)

篇幅有限,本文不对具体的运算符重载进行详细介绍,但至少对运算符的重载有基本的概念,了解之后,再去了解更多的特定运算符重载原则。

最后:不要滥用运算符重载。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008890.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号