C++运算符重载
admin
2024-04-30 10:52:21
0次

定义:运算符重载是对已有的运算符赋予多重含义,使得同一个运算符作用于不同类型的数据时导致不同的行为。

实质:运算符重载就是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。

运算符重载的规则:

(1)C++语言中的运算符除了少数几个(C++标准规定,有些操作符是不能重载的,它们是类属关系运算符“.”、成员指针运算符“.*”、作用域分辨符“::”和三目运算符“?:”。前面两个运算符保证了C++语言中访问成员功能的含义不被改变。作用域分辨符的操作数是类型,而不是普通的表达式,也不具备重载的特征。)外,全部可以重载,而且只能重载C++中已经存在的运算符。(2)重载之后运算符的优先级和结合性都不会改变。
(3)运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。

运算符的重载形式有两种,重载为类的非静态成员函数和重载为非成员函数。

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

  返回类型  类名 ::operator 运算符(形参表){

   函数体

}

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

返回类型  类名 ::operator 运算符(形参表){

   函数体

}

注:

  • 返回类型: 指定了运算结果类型 ,int a,int b, a+b 返回值 int

  • 函数名: operator和运算符组成函数名,operator是定义运算符重载的关键字

  • 函数参数

    • 运算符重载函数是类中成员函数: 函数参数等于操作数-1

    • 运算符重载函数是友元函数: 函数参数等于操作数

  • 函数体: 写运算符的实际想要的运算即可

  • C++ 每个类中存在一个赋值的重载函数

     具体代码:

#include 
using namespace std;
class Data 
{
public:Data() {}Data(int first, int second) :first(first), second(second) {}void print() {cout << first << ":" << second << endl;}//运算符重载函数是类成员函数Data operator+(Data& data) {/*Data result = Data(this->first + data.first, this->second + data.second);return result;*///等效下面四行函数/*Data result;result.first = this->first + data.first;result.second = this->second + data.second;return result;*/return Data(this->first + data.first, this->second + data.second);}friend Data operator+=(Data& data1, Data& data2);protected:int first;int second;
};
Data operator+=(Data& data1, Data& data2) 
{data1.first += data2.first;data1.second += data2.second;return data1;
}
int main()
{Data data1(1, 2);Data data2(2, 3);//错误,+不能直接操作自定义类型//重载函数隐式调用Data result = data1 + data2;		//拷贝构造函数不写存在默认的//类成员函数重载本质是把data1 + data2 解析为 data1.operator+(data2);//重载函数显式调用Data result2 = data1.operator+(data2);result2.print();result.print();Data data3;data3=data3 + data1;int a = 1;a = a + 3;//友元重载Data data4(1, 4);Data data5(3, 5);data4 += data5;		//解析为 operator+=(data4, data5);data4.print();Data returnObject=operator+=(data4, data5);//函数返回值类型:Data //函数名: operator+returnObject.print();return 0;
}

相关内容

热门资讯

黑科技作弊器!微信小程序微乐安... 黑科技作弊器!微信小程序微乐安徽辅助器(作弊器),微乐陕西三带切实是真的有透视挂软件1、微信小程序微...
黑科技外挂!微乐自建房辅助下载... 黑科技外挂!微乐自建房辅助下载(外挂),微乐郑州麻将本来存在有透视挂方法1、操作简单,无需微乐自建房...
黑科技透视挂!微信微乐游戏辅助... 黑科技透视挂!微信微乐游戏辅助器(透视挂),微乐卡五星麻将好像有透视挂软件微信微乐游戏辅助器辅助器是...
黑科技透视挂!微乐小程序外辅助... 黑科技透视挂!微乐小程序外辅助工具(透视挂),微乐衡阳十五胡确实有透视挂方法1、微乐小程序外辅助工具...
黑科技外挂!微乐云南小程序修改... 黑科技外挂!微乐云南小程序修改器ios(外挂),微乐天津麻将手机版好像是有透视挂软件微乐云南小程序修...
黑科技开挂!微乐江西小程序辅助... 黑科技开挂!微乐江西小程序辅助器免费(开挂),微乐棋牌麻将真是是有透视挂工具1、完成微乐江西小程序辅...
黑科技辅助器!微乐麻将脚本透视... 黑科技辅助器!微乐麻将脚本透视(辅助器),微乐明皇暗保竟然是真的有透视挂教程1、游戏颠覆性的策略玩法...
黑科技辅助!微信小程序微乐自建... 黑科技辅助!微信小程序微乐自建房脚本下载(辅助),微乐苏州麻将一直有透视挂插件在进入微信小程序微乐自...
黑科技辅助!微乐安徽小程序辅助... 黑科技辅助!微乐安徽小程序辅助(辅助),微乐三打一都是是有透视挂方法1、不需要AI权限,帮助你快速的...
黑科技辅助器!微乐山西小程序破... 黑科技辅助器!微乐山西小程序破解器(辅助器),微乐贵阳捉鸡真是真的有透视挂方法暗藏猫腻,小编详细说明...