ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++运算符重载

2021-04-16 20:30:20  阅读:170  来源: 互联网

标签:const name c++ 运算符 other 重载 class


运算符重载函数

class class_name
{
public:
	int x;					// x轴坐标
	int y;					// y轴坐标
	
	class_name();
	class_name(int x0, int y0);
	
	// 定义类的时候,提供一个运算符重载的对应解析函数即可
	class_name operator+(const class_name& other);
};
class_name class_name::operator+(const class_name & other)
{
	// 在该函数内,去实现+的真正应该做的操作
	class_name tmp;
	tmp.x = this->x + other.x;
	tmp.y = this->y + other.y;
	
	return tmp;
}
class_name class_name ::operator=(const class_name & other)
{
	// 在该函数内,去实现=的真正应该做的操作
	// c = a;	c是this,a是other,c=a整个表达式的值是返回值
//	class_name tmp;
	this->x = other.x;
	this->y = other.y;
	
	return *this;
}
coordinate coordinate::operator+=(const coordinate& other)
{
	this->x = this->x + other.x;
	this->y = this->y + other.y;
	return *this;
}
class::class_name(int x0, int y0)
{
	x = x0;
	y = y0;
};
class_name a(1, 3);
class_name b(2, 6);
class_name c;

c = a + b;
// 编译时被编译器翻译成: c = a.operator+(b);		c = b.operator+(a);

c++ 运算符=重载函数 与 拷贝构造函数

初始化时拷贝构造函数
非初始化时赋值运算符重载
赋值运算符重载若有返回值,则会调用拷贝构造函数

因为若返回值是整个对象,c++语言为了保证语义是对的,为了真正的返回一个对象,

这里面出现中间的临时变量,把return *this;复制到中间临时变量,把中间临时变量作为返回值传递出去

目的:把整个对象的值要复制一遍过去传递出去作为返回值

多了一次复制过程,才会调用拷贝构造函数

赋值运算符重载函数参数中的const

C++的const要求非常严格,在c = a + b;中如果=运算符的重载函数参数列表中没有用const会编译报错。

因为c对应的实参是a+b的值,a+b执行相当于operator+的返回值是临时变量被认为是const
所以为了匹配
运算符=重载函数要加const

避免赋值运算符中的自赋值

if (this != &other)
{
	//
}
	
return *this;

赋值运算符重载函数返回 引用

class_name& class_name::operator=(const class_name& other)
{
	return *this;
}

class_name& 和变量类型是一个级别的

this是指针,*this是变量级别的,可以返回引用
int &b = a;	类似于 int * const b = &a;

引用的本质是const指针

作用:返回引用可以避免一次返回值的值传递的对象复制,这需要消耗资源的。

运算符重载函数返回值类型对应表

普通变量直接复制
对象拷贝构造函数
对象引用直接复制

标准库中String类的运算符重载

https://zh.cppreference.com/w/%E9%A6%96%E9%A1%B5

标签:const,name,c++,运算符,other,重载,class
来源: https://blog.csdn.net/weixin_44748127/article/details/115767024

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有