C++提高:运算符重载

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++提高:运算符重载相关的知识,希望对你有一定的参考价值。

题目

代码实现+、=、==、[]、!=、++、–等运算符重载

代码

在这里插入图片描述

#include <iostream> 
using namespace std;

class A {
public:
	A(int x, int y)
	{
		m_iX = x;
		m_iY = y;
	}
	// 前置--运算符重载
	A &operator--()
	{
		this->m_iX--;
		this->m_iY--;
		return *this;
	}
	// 后置--运算符重载 
	A operator--(int)
	{
		A coor(*this);
		coor.m_iX = this->m_iX--;
		coor.m_iY = this->m_iY--;
		return coor;
	}
	// +号运算符重载 
	A operator+(A &c)
	{
		A temp(0, 0);
		temp.m_iX = this->m_iX + c.m_iX;
		temp.m_iY = this->m_iY + c.m_iY;
		return temp;
	}
public:
	int m_iX;
	int m_iY;
};

int main(void)
{
	A coor1(1, 3);
	A coor2(2, 4);
	A coor3(0, 0);
	coor1--;
	--coor2;
	coor3 = coor1 + coor2;
	cout << coor3.m_iX << endl;
	cout << coor3.m_iY << endl;
	return 0;
}

知识回顾

重载

在 C++当中,所谓重载,就是赋予新的含义。函数重载( Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。

运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能

重载运算符特点

  1. C++中的运算符除了少数几个之外,全部可以重载,而且只能重载 C++中已有的运算符

  2. 重载之后运算符的优先级和结合性都不会改变

  3. 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来说,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型

  4. 不能重载的运算符只有五个,它们是:成员运算符“.”、指针运算符“*”、作用域运算符“::”、“sizeof”、条件运算符“?:

  5. 运算符重载形式有两种,重载为类的成员函数和重载为类的友元函数

  6. 运算符重载为类的成员函数的一般语法形式为:

    函数类型 operator 运算符(形参表)
    {
    	函数体;
    }
    
  7. 运算符重载为类的友元函数的一般语法形式为:

    friend 函数类型 operator 运算符(形参表)
    {
    	函数体;
    }
    

运算符重载的注意事项

可重载的运算符

算术运算符:+,-,,/,%,++,–;
位操作运算符:&,|,~,^,<<,>>
逻辑运算符:!,&&,||;
比较运算符:<,>,>=,<=,==,!=;
赋值运算符:=,+=,-=,
=,/=,%=,&=,|=,^=,<<=,>>=;
其他运算符:[],(),->,(逗号运算符),new,delete,new[],delete[],- >*。
下列运算符不允许重载:.,.*,::,?:

运算符重载后,优先级和结合性

用户重载新定义运算符,不改变原运算符的优先级和结合性。这就是说,对运算符重载不改变运算符的优先级和结合性,并且运算符重载后,也不改变运算符的语法结构,即单目运算符只能重载为单目运算符,双目运算符只能重载双目运算符

重载运算符有哪些限制

1)不可臆造新的运算符。必须把重载运算符限制在 C++语言中已有的运算符范围内的允许重载的运算符之中

2)重载运算符坚持 4 个“不能改变”

  • 不能改变运算符操作数的个数
  • 不能改变运算符原有的优先级
  • 不能改变运算符原有的结合性
  • 不能改变运算符原有的语法结构

运算符重载时必须遵循哪些原则

  1. 运算符重载可以使程序更加简洁,使表达式更加直观,增加可读性。但是,
    运算符重载使用不宜过多,否则会带来一定的麻烦
  2. 重载运算符含义必须清楚
  3. 重载运算符不能有二义性
  4. 运算符重载函数的两种形式
  5. 运算符重载的函数一般地采用如下两种形式:成员函数形式和友元函数形式。
    这两种形式都可访问类中的私有成员

以上是关于C++提高:运算符重载的主要内容,如果未能解决你的问题,请参考以下文章

C++基础5 运算符重载提高

C++提高:String 类实现

C++提高:String 类实现

C++从入门到入土第四篇:运算符重载

运算符 + 重载 C++

C++运算符重载