函数函数与运算符的重载

合集下载

c 运算符的重载习题答案

c  运算符的重载习题答案

1.概念填空题1.1运算符重载是对已有的运算符赋予多重含义,使同一个运算符在作用于不同类型对象时导致不同的行为。

运算符重载的实质是函数重载,是类的多态性特征。

1.2可以定义一种特殊的类型转换函数,将类的对象转换成基本数据类型的数据。

但是这种类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。

类类型转换函数既没有参数,也不显式给出返回类型。

类类型函数中必须有return 表达式的语句返回函数值。

一个类可以定义多个类类型转换函数。

1.3运算符重载时其函数名由operator运算符构成。

成员函数重载双目运算符时,左操作数是对象,右操作数是函数参数。

2.简答题2.2简述运算符重载的规则。

2.2简述重载单目运算符++、--,前置和后置时的差别。

2.3 C++中重运算符是否都可以重载?是否都可以重载成类的成员函数?是否都可以重载成类的友元函数?2.4 构造函数作为类型转换函数的条件是什么。

3.选择题3.1在下列运算符中,不能重载的是(B)A.!B. sizeofC. newD. delete3.2 不能用友员函数重载的是(A)。

A.=B.==C.<=D.++3.3下列函数中,不能重载运算符的函数是(B)。

A.成员函数B.构造函数C.普通函数D.友员函数3.4如果表达式++i*k时中的”++”和”*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为(B)。

A.operator*(i.operator++(),k) B.operator*(operator++(i),k)C.i.operator++().operator*(k) D.k.operator*(operator++(i))3.5已知在一个类体中包含如下函数原型:VOLUME operator-(VOLUME)const;下列关于这个函数的叙述中,错误的是(B )。

A.这是运算符-的重载运算符函数B.这个函数所重载的运算符是一个一元运算符C.这是一个成员函数D.这个函数不改变数据成员的值3.6在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。

作业13

作业13

HZAU-专业C++作业13(运算符重载)判断题1. 所有的运算符都可以重载。

F2.在C++中,编译时的多态性是通过函数和运算符的重载实现的。

T3. 运算符重载是通过对已有的运算符重新定义操作功能来实现的,它是C++语言多态性的一种表现。

T4. 运算符重载只可以是类的成员函数和友元函数,不可以是普通函数。

T5. 运算符重载是通过函数来实现的,定义运算符重载函数时,函数名中要使用关键字operator。

T6. 运算符重载后,优先级、结合性和操作数都是不变的。

T7. 重载运算符的函数也可以设置默认参数。

F8. 使用成员函数方法和使用友元函数的方法所定义的重载运算符函数的参数个数是不相同的。

T9. 运算符“.”、“::” 、“?:” 不能重载T10. 运算符=、()、[]和-&gt;可作为类成员运算符, 不能作为友员运算符。

T选择题1.下列运算符中,(A )运算符在C++中不能重载。

A. ?:B. [ ]C. newD. &&2.下列运算符不能用友元函数重载的是(c)。

A. +B. =C. *D. <<3.在一个类中可以对一个操作符进行( D )重载。

A. 1种B. 2种及以下C. 3种及以下D. 多种4.友元运算符obj1>obj2被C++编译器解释为( A )。

A. operator > (obj1, obj2)B. > (obj1, obj2)C. obj2.operator > (obj1)D. obj1.operator > (obj2)5.下列关于C++运算符函数的返回类型的描述中,错误的是( C )。

A. 可以是类类型B. 可以是int类型C. 可以是void类型D. 可以是float类型6.下列关于运算符重载的描述中,正确的是( D )。

A. 运算符重载可以改变运算符的操作数的个数B. 运算符重载可以改变优先级C. 运算符重载可以改变结合性D. 运算符重载不可以改变语法结构7.先加一然后再使用的++运算符的重栽形式是(A)。

C--程序设计--第10章-多态性及虚函数

C--程序设计--第10章-多态性及虚函数

使用重载函数注意:
不要使用重载函数描述不相干的函数 在类中,构造函数和普通成员函数均可以
重载 避免与函数的默认参数产生二义性
二、运算符重载
运算符重载(operate overloading)就是 赋予已有的运算符多重含义。
运算符重载实质是函数重载,运算符重载 的选择与函数重载类似,会根据运算符的 操作数的类型、个数和顺序来进行运算符 函数的选择。
#include<iostream.h> str#iinngc:l:usdter<isntgr(icnhga.rh>*s) v{}ossccsssc{s{{ittohtttolsstlsssls*drruarrrueptrepttepsi1trii3tc{pn=rin=rrn=pmn.<nn.<lprgncngncign=agp<*ggp<auitepgtepnte'irssrssbv\hwy:hwyghwnsit1ssitsla0=(:=(:=(tnr=ttnrit'scssscs:sc)rt1"rrt3scesss~ivci;thpt1hpsih1(.T23(.t::tttsnohn}ra,r.a,tza()gh(()grrrrttiatlrsilrsrer";eass;eiiiirdre[)ne[1i;[Ttt1ttnnnniglnl;gnl.nlhl)rlggggnep*e(e}(gesgeiei;2e(((gtrsnsnstnp(nsns)ncsi(lipg)gthg)ig(;(htn)en;t;tr;t;nti)a)artnthhih}ths<<ri{((;+n++<p<snd))}1g1s1aere*ige;]]i]nonszl{{;&;z;ddgd)&eercseelrl;s=teo1)m;a;/18etu)om/)0ut..;)构sr<""/;pn<造);//;s;/复}lp函构e<制n<数造ge构tn函hd造;l数};重} 载

谭浩强《C++程序设计》课件 第10章

谭浩强《C++程序设计》课件 第10章

通过运算符重载,扩大了 通过运算符重载,扩大了C++已有运算符的作用范 已有运算符的作用范 使之能用于类对象. 围,使之能用于类对象. 运算符重载对C++有重要的意义,把运算符重载和 有重要的意义, 运算符重载对 有重要的意义 类结合起来,可以在C++程序中定义出很有实用意 类结合起来,可以在 程序中定义出很有实用意 义而使用方便的新的数据类型.运算符重载使C++ 义而使用方便的新的数据类型.运算符重载使 具有更强大的功能,更好的可扩充性和适应性, 具有更强大的功能,更好的可扩充性和适应性,这 最吸引人的特点之一. 是C++最吸引人的特点之一. 最吸引人的特点之一
c.imag=imag+c2.imag; return c;} void Complex∷display( ) //定义输出函数 ∷ 定义输出函数 {cout<<〃(〃<<real<<〃,〃<<imag<<〃i)〃<<endl;} int main( ) {Complex c1(3,4),c2(5,-10),c3; c3=plex_add(c2); cout<<〃c1=〃; c1.display( ); cout<<〃c2=〃; c2.display( ); cout<<〃c1+c2=〃; c3.display( ); return 0; }
Complex operator+ (Complex& c1,Complex& c2);
在定义了重载运算符的函数后,可以说: 在定义了重载运算符的函数后,可以说: 函数 operator+重载了运算符 . 重载了运算符+. 重载了运算符 为了说明在运算符重载后,执行表达式就是调用函 为了说明在运算符重载后, 数的过程, 数的过程,可以把两个整数相加也想像为调用下面 的函数: 的函数:

第8章 C++重载

第8章 C++重载
operator++()确实修改了它的参数, 而且其返回值要求 是左值,这个条件决定了它不能以值返回
13
8-3 返回值和返回地址
如果+以引用返回 :
RMB& operator +(RMB& s1,RMB& s2) { unsigned int jf = s1.jf+s2.jf;
引用返回导致了调用者 unsigned int yuan=s1.yuan+s2.yuan ;
};
前后增量操作的意义, 决定了其不同的返回 方式。前增量运算符 返回引用,后增量运 算符返回值。
20
为了区别前增量与后增量, 除此之外没有任何作用。
8-4 运算符作为成员函数
++ 的成员形式的重载
Increase & Increase::operator ++()
{ value++; //先增量 return *this; //再返回原对象 } Increase Increase::operator ++(int) { Increase temp(*this); //临时对象存放原有对象值 value++; //原有对象增量修改 return temp; //返回原有对象值 }
9
8-2 运算符重载
下面的程序将运算符+和++声明为人民币类的 友元:
class RMB
{
public: RMB(unsigned int d, unsigned int c); friend RMB operator +(RMB&, RMB&); friend RMB& operator ++(RMB&); void display(){ cout <<(yuan + jf / 100.0) << endl; } protected: unsigned int yuan; unsigned int jf; };

c++学习资料第 06 章 运算符重载

c++学习资料第 06 章 运算符重载
第 4 页 共 15 页 (西昌学院信息技术系 韩德)
第 6 章 运 算 符 重 载
{ return Complex( ­c.Real, ­c.Image ); } void Complex::print()const { cout << '(' << Real << " , " << Image << ')' << endl; } void main() { Complex c1( 2.5,3.7 ), c2( 4.2, 6.5 ) ; Complex c ; c = c1 ­ c2 ; // operator­(c1,c2) c.print() ; c = 25 + c2 ; // operator+(25,c2) c.print() ; c = c2 + 25 ; // operator+(c2,52) c.print() ; c = ­ c1 ; // operator­(c1) c.print() ; } 当一个运算符的操作需要修改类对象状态时,应该以成员函数重载。例如,需要左值操 作数的运算符(如 =,*=,++ 等)应该用成员函数重载。如果以友员函数重载,可以使用 引用参数修改对象。 当运算符的操作数(尤其是第一个操作数)希望有隐式转换,则重载算符时必须用友员 函数或普通函数。 C++中不能用友员函数重载的运算符有 = () [] -> 6.3 几个典型运算符重载 本节讨论在数学类中常用的几个运算符重载的特点和应用。 6.3.1 重载 ++ 与 ­­ 自增和自减运算符有前置和后置两种形式。每个重载运算符的函数都必须有明确的特 征,使编译器确定要使用的版本。C++规定,前置形式重载为一元运算符函数,后置形式重 载为二元运算符函数。 【例 6­4】例 6­2 中使用了成员函数重载++和­运算符。本例用友员函数重载++运算符。 设有简单类定义 class Increase { public : Increase() ; … friend Increase operator ++ ( Increase & ) ; friend Increase operator ++ ( Increase & , int ) ; private : unsigned value ; } ; 则前置重载的实现为: Increase operator++ ( Increase & a ) { a.value ++ ;

C++中运算符的重载应用


例如 : + 运算符完成两个 实数 、 用“ ” 两个复数 、 两个字符串的 法 的实 现 。
相关运算 。两个实 数 a 1,= ,则 两个实 数相加 的结 果是 : =0b2
a b 1+ = 2 两个复 数 := 0 2,= + 0 , 两个 复数相 加 的 +=02 1; a 1+ ib 2 1i则 结 果 是 :+ = 2 1i两 个 字 符 串 := v ul,= td ” 则 两 ab 1+ 2 ; a “i a b “s i , s ” uo
( agagP ltcnc ng Hun gn 4 80 ) Hun gn oyeh iCoee agag 30 2
Ab tu t On t e C + +,o e ao v r a i gi a ay e o e p a n t e c n e t f p r t r v r a i g sn x m— s rc h p r tro e l d n n lz d t x li o c p e ao e l d n ,u i g e a o s h oo o o
中图分 类 号 TP3 2 1 文 献 标 识 码 B 文 章 编号 1 1 2 — 5 4 00 0 5 7
Ap l a in o e a o e la ig i + pi t f c o Op r t r Ov r d n C+ o n
Z ag Je hn i
K y rs p rtr F n t no ela ig Ap l ain e wo d P eao u ci v r dn o o pi t s c o


什 么是运算符的重载
() 4 重载运算含义必须清楚 , 不能产生二义性 。运算符的重
运算符重载一般分两种形式 , 即重载为类的 运算符重载是对 已有的运算符赋予多重含义 ,使同一个运 载实质是函数重载 。 成员 函数和重载为类的友元 函数 ,这两种形式都可访问类中的 算符作

4第四章 运算符重载

1 2 3
const complex operator - (const complex &c) const; void display(); //输出复数 private: //私有数据成员 1.是为了堵塞a+b=c的漏洞。 double real; //复数实部 2. 3.是为了扩大适应性。 double imag; //复数虚部 };
17
[ ]运算符重载为成员函数
下标运算符[]可以重载: 重载形式为:operator[](int); 当 X x; 隐含调用。 x[y] 可被解释为: 显式调用。 x. operator [ ](y); 只能重载为成员函数,不能使用友元函数。 这个类显然是个‚数组类‛。
18
前置++和后置++重载为成员函数
9
使用
void main(){
complex c1(5,4),c2(2,10),c3; //三个复数类的对象 cout<<"c1="; cout<<"c2="; c1.display(); c2.display();
c3=c1-c2; //使用重载运算符完成复数减法 cout<<"c3=c1-c2="; c3.display(); 程序输出结果为:
这三个运算符是许多 教课书没有提到的。
唯一的一个三目运 算符不能重载。
3
运算符重载的基础
设计运算符重载函数,首先要了解运算符原本的运算语义。重
载函数要忠实遵守该运算符作用于基本数据类型时的语义,
并表现出自身所特有的性质。 例如:+ 、+= 、=、++(前)、++(后) ....

c++ 重载比较运算符

c++ 重载比较运算符在C++中,可以通过重载比较运算符来实现用户自定义类型的比较操作。

具体而言,可以通过重载“==”、“!=”、“<”、“>”、“<=”、“>=”等比较运算符,为自定义类型定义比较规则。

需要注意的是,C++规定,对于自定义类型,只能重载“<”运算符,而其他比较运算符都可以通过“<”和“==”运算符的组合实现。

具体而言,可以按照以下方式重载比较运算符:1. 重载“<”运算符定义一个成员函数或非成员函数,其返回值为bool类型,用于比较两个对象的大小关系。

重载“<”运算符的一般形式如下所示: bool operator<(const 类型& obj) const;其中,类型代表自定义类型的名称,obj代表另一个需要进行比较的对象,const关键字表示该函数不会修改当前对象的状态。

2. 重载“==”运算符如果需要重载“==”运算符,可以在重载“<”运算符的基础上,添加一条与“<”运算符相反的判断语句,从而实现“==”运算符的定义。

具体而言,重载“==”运算符的一般形式如下所示:bool operator==(const 类型& obj) const;其中,类型和obj的含义与重载“<”运算符中的相同。

3. 重载其他比较运算符对于其他比较运算符,如“!=”、“>”、“<=”、“>=”等,可以通过重载“<”和“==”运算符的组合实现。

例如,重载“!=”运算符的一般形式如下所示:bool operator!=(const 类型& obj) const {return !(*this == obj);}其中,类型和obj的含义与重载“<”运算符中的相同。

总之,C++中的比较运算符重载为自定义类型的比较操作提供了灵活的方式,通过重载比较运算符,可以根据自定义类型的特点,定义不同的比较规则,从而实现更加灵活和丰富的编程功能。

C++运算符重载讲解与经典实例 (2)

运算符重载实际是一个函数,所以运算符的重载实际上是函数的重载。编译程序对运算符重载的选择,遵循着函数重载的选择原则。当遇到不很明显的运算时,编译程序将去寻找参数相匹配的运算符函数。
5.重载运算符有哪些限制:
(1)不可臆造新的运算符。必须把重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中。
(c1+c2)*(c1-c2)*c2/c1=9.61538+25.2308i
在程序中,类complex定义了4个成员函数作为运算符重载函数。将运算符重载函数说明为类的成员函数格式如下:
<类名>operator<运算符>(<参数表>)
其中,operator是定义运算符重载函数的关键字。
程序中出现的表达式:
位操作运算符:&,|,~,^,<<,>>
逻辑运算符:!,&&,||;
比较运算符:<,>,>=,<=,==,!=;
赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=;
其他运算符:[],(),->,,(逗号运算符),new,delete,new[],delete[],->*。
double real;
double imag;
};
complex a(10,20),b(5,8);
“a+b”运算如何实现?这时候我们需要自己编写程序来说明“+”在作用于complex类对象时,该实现什么样的功能,这就是运算符重载。运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同类型的行为。
运算符重载形式有两种,重载为类的成员函数和重载为类的友元函数。
运算符重载为类的成员函数的一般语法形式为:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档