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

2022.7.12 C++——赋值运算符和运算符重载的总结

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

2022.7.12 C++——赋值运算符和运算符重载的总结

赋值运算符
  • 1. 赋值运算符
  • 2. 运算符重载总结
    • C++中不允许重载的运算符
    • 重载运算符有以下几个限制

1. 赋值运算符

例1:

class CDate
{
	int year;
	int month;
	int day;
public:
	CDate(int y, int m, int d) :year{ y }, month{ m }, day{ d }//带参数的构造函数
	{
	}
	CDate(const CDate& dt) :year(dt.year), month(dt.month), day(dt.day) {}  //拷贝构造函数
	~CDate() {}//析构函数——没有参数的
	CDate & operator=(const CDate& dt)//引用
	{
		if (this != &dt)//防止自己给自己赋值-取地址
		{
			year = dt.year;
			month = dt.month;
			day = dt.day;
		}
		return *this;
	}
};

赋值运算符如下:

例2:

lass Int
{
private:
	int value;
public:
	Int(int x = 0) :value( x )
	{
		cout << "create Int: " << this << endl;
	}
	Int(const Int& it) :value( it.value )
	{
		cout << "copy Int:" << this<< endl;
	}
	void Print() const
	{
		cout << "value:" << value <<  endl;
	}

	Int& operator=(const Int& it)
	{
		if (this != &it)
		{
			value = it.value;
		}
		cout << "operator=" << this<< endl;
		return *this;
	}
	~Int() 
	{
		cout << "destroy " << this << endl;
	}
};
//任何情况下,不要将临时对象以引用返回
Int& fun()  //引用返回,不会再构建对象,当函数结束,对象的生存期也会跟着结束
{
	Int tmp(10);
	return tmp;
}
int main()
{
	Int a(0);
	a = fun();
	a.Print();

	return 0;//想要赋值,等号左边一定要有对象,赋值是对象与对象之间进行赋值。

}

注意:
①任何情况下,不要将临时对象以引用返回,而且当函数结束,对象的生存期也会跟着结束;
②想要赋值,等号左边一定要有对象,赋值是对象与对象之间进行赋值。

2. 运算符重载总结

①运算符重载函数的函数名必须为关键字operator加一个合法的运算符。在调用该函数时,将右操作数作为函数的实参。
②当用类的成员函数实现运算符的重载时,运算符重载函数的参数(当为双目运算符时)为一个或(当为单目运算符时)没有。运算符的左操作数一定是对象,因为重载的运算符是该对象的成员函数,而右操作数是该函数的参数。
③单目运算符“++”和“–”存在前置与后置问题:
前置“++”格式为:
返回类型 类名:: operator ++(){ }
而后置“++”格式为:
返回类型 类名::operator++(int){ }
注意:后置“++”中参数int仅用作区分,并没有什么实际意义,可以给一个变量名,也可以不给变量名。
④C++中只有极少数的运算符不允许重载。

C++中不允许重载的运算符


还有#,##,//,也不能进行运算符的重载。

重载运算符有以下几个限制

①不可臆造新的运算符;
②不能改变运算符原有的优先级,结合性和语法结构,不能改变运算符操作数的个数;例如,双目就是2个;
③运算符重载不宜使用过多;
④重载运算符含义必须清楚,不能有二义性。

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

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

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