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)也是一个道理,同一个运算符可以有不同的功能
重载运算符特点
-
C++中的运算符除了少数几个之外,全部可以重载,而且只能重载 C++中已有的运算符
-
重载之后运算符的优先级和结合性都不会改变
-
运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来说,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型
-
不能重载的运算符只有五个,它们是:成员运算符“
.
”、指针运算符“*
”、作用域运算符“::
”、“sizeof
”、条件运算符“?:
” -
运算符重载形式有两种,重载为类的成员函数和重载为类的友元函数
-
运算符重载为类的成员函数的一般语法形式为:
函数类型 operator 运算符(形参表) { 函数体; }
-
运算符重载为类的友元函数的一般语法形式为:
friend 函数类型 operator 运算符(形参表) { 函数体; }
运算符重载的注意事项
可重载的运算符
算术运算符:+,-,,/,%,++,–;
位操作运算符:&,|,~,^,<<,>>
逻辑运算符:!,&&,||;
比较运算符:<,>,>=,<=,==,!=;
赋值运算符:=,+=,-=,=,/=,%=,&=,|=,^=,<<=,>>=;
其他运算符:[],(),->,(逗号运算符),new,delete,new[],delete[],- >*。
下列运算符不允许重载:.,.*,::,?:
运算符重载后,优先级和结合性
用户重载新定义运算符,不改变原运算符的优先级和结合性。这就是说,对运算符重载不改变运算符的优先级和结合性,并且运算符重载后,也不改变运算符的语法结构,即单目运算符只能重载为单目运算符,双目运算符只能重载双目运算符
重载运算符有哪些限制
1)不可臆造新的运算符。必须把重载运算符限制在 C++语言中已有的运算符范围内的允许重载的运算符之中
2)重载运算符坚持 4 个“不能改变”
- 不能改变运算符操作数的个数
- 不能改变运算符原有的优先级
- 不能改变运算符原有的结合性
- 不能改变运算符原有的语法结构
运算符重载时必须遵循哪些原则
- 运算符重载可以使程序更加简洁,使表达式更加直观,增加可读性。但是,
运算符重载使用不宜过多,否则会带来一定的麻烦 - 重载运算符含义必须清楚
- 重载运算符不能有二义性
- 运算符重载函数的两种形式
- 运算符重载的函数一般地采用如下两种形式:成员函数形式和友元函数形式。
这两种形式都可访问类中的私有成员
以上是关于C++提高:运算符重载的主要内容,如果未能解决你的问题,请参考以下文章