欢迎来到天天文库
浏览记录
ID:44283804
大小:201.50 KB
页数:35页
时间:2019-10-20
《【0】操作符重载专题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1、操作符重载定义:对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同类型的行为。实现机制:将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参;编译系统遵循函数重载的选择原则2021/9/161数据描述操作符重载的规则含义必须清楚,不能有二义性!只能重载C++语言中已有的运算符,不可臆造新的。不改变原运算符的优先级和结合性。不能改变操作对象的个数。经重载的运算符,其操作对象中至少应该有一个是自定义类型。2021/9/162数据描述可以重载的操作符重载+-*/%^&++--
2、~!=<>
3、+=-=*=/=^=&=
4、=<<>><<=>>===!=<=>=&&
5、
6、->*->()[]newnew[]deletedelete[]2021/9/163数据描述可重载操作符的使用说明函数操作符:(),可以带多个参数一元和二元均可重载:+-*&例如:+a、a+b前置和后置均可重载:++--例如:a++、++a除了赋值操作符=之外,基类中所有操作符重载均可被派生类继承!2021/9/164数据描述不能重载的操作符运算符运算符名称禁止重载的理由?:三目条件运算符C++中没有定义三目运算符的语法.和.*成员操作符为保证成员操作符对成
7、员访问的安全性::作用域操作符该操作符右操作数不是表达式sizeof类型字长操作符该操作符的操作数为类型名,不是表达式2021/9/165数据描述2、操作符重载的形式运算符重载为类的成员函数函数类型operator运算符(形参表){函数体;}参数个数=原操作数个数-1(后置++、--除外)运算符重载为类的友元函数friend函数类型operator运算符(形参表){}参数个数=原操作数个数,且至少应该有一个自定义类型的形参2021/9/166数据描述3、重载为类的成员函数只能重载为类成员函数的操作符:[]、=、()、->一元操
8、作符重载:+、-、*、&、!、++、--注意:++、--,前置后置均可!二元操作符重载2021/9/167数据描述1)一元操作符重载函数类型operatorop();实现功能opX;//X为类对象相当于函数调用X.operatorop();说明:函数无需任何参数,因为隐含了一个参数(this指针),操作数由对象的this指针给出。2021/9/168数据描述示例1ClassC{private:intdata;public:C&operator-(){data=-data;return*this;}}调用:CTemp;Temp=
9、-Temp;2021/9/169数据描述2)二元操作符重载函数类型operatorop(形参表)实现功能XopY//X、Y均为类对象相当于函数调用X.operatorop(Y)说明:其函数只需显式说明一个参数;该参数为运算符的右操作数,左操作数由this指针提供。2021/9/1610数据描述示例2ClassC{private:intdata;public:Coperator-(constC&a){Ctemp;temp=data-a.data;returntemp;}}调用:Ca,b,c;c=a-b;等价于c=a.operat
10、or-(b);2021/9/1611数据描述3)下标操作符:[]必须要以成员函数的形式重载!用于检查数组下标是否越界语法形式:type&operator[](…);consttype&operator[](…)const;常量成员函数C[i]<==>C.operator[](i)2021/9/1612数据描述示例3classintArray{public:int&opeartor[](int);private:int*a;intsize;…};int&intArray::opeartor[](inti){If(i<0
11、
12、i>=
13、size)throw(…);returna[i];};2021/9/1613数据描述4)函数操作符:()必须要以成员函数的形式重载!它可以包含多个参数,可用于多维数组的访问形式语法形式:type&operator()(…);C(x,name)<==>C.operator()(x,name)2021/9/1614数据描述示例4classintTwoArray{public:int&opeartor()(int,int);private:int*a;introws,cols;…};int&intTwoArray::opeartor
14、()(inti,intj){if(i<0
15、
16、i>=rows
17、
18、j<0
19、
20、j>=cols)throw(…);returna[i*cols+j];};2021/9/1615数据描述5)自增和自减操作符++、--都有前置和后置两种形式前置重载:operator++();后置重载:o
此文档下载收益归作者所有