函数重载习题与解析

合集下载

C++重载习题

C++重载习题

01.分析以下程序执行结果#include<iostream.h>int add(int x,int y){return x+y;}double add(double x,double y){return x+y;}void main(){int a=4,b=6;double c=2.6,d=7.4;cout<<add(a,b)<<","<<add(c,d)<<endl;}解:本题说明函数重载的使用方法,这里有两个add()函数,一个add()函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的。

所以输出为: 10,10-----------------------------------------------02.分析以下程序的执行结果#include<iostream.h>class Sample{int i;double d;public:void setdata(int n){i=n;}void setdata(double x){d=x;}void disp(){cout<<"i="<<i<<",d="<<d<<endl;}};void main(){Sample s;s.setdata(10);s.setdata(15.6);s.disp();}解:本题说明重载成员函数的使用方法。

setdata()成员函数有两个,根据其参数类型加以区分。

所以输出为:i=10, d=15.6-----------------------------------------------03.分析以下程序的执行结果#include<iostream.h>class Sample{int n;public:Sample(){}Sample(int i){n=i;}Sample &operator =(Sample);void disp(){cout<<"n="<<n<<endl;}};Sample &Sample::operator=(Sample s){Sample::n=s.n;return *this;}void main(){Sample s1(10),s2;s2=s1;s2.disp();}解:本题说明重载运算符(=)的使用方法。

C++语言选择题40道:C++函数重载与内联函数.Tex

C++语言选择题40道:C++函数重载与内联函数.Tex

C++函数重载与内联函数试题1.以下哪个描述最准确地说明了函数重载?o A. 在同一作用域内使用相同函数名但参数列表不同的多个函数。

o B. 使用不同函数名但参数列表相同的多个函数。

o C. 在不同作用域内使用相同函数名和参数列表的多个函数。

o D. 在同一作用域内使用不同函数名和参数列表的多个函数。

答案: A解析: 函数重载允许在同一个作用域内定义具有相同名字但参数列表不同的函数。

2.如何在C++中声明一个内联函数?o A. 使用#define宏定义。

o B. 使用static关键字修饰函数。

o C. 使用inline关键字在函数声明前。

o D. 使用register关键字修饰函数。

答案: C解析: C++中inline关键字用于建议编译器将函数体插入到每次函数调用的地方。

3.下列代码中,哪个函数会被调用?o B. func(double);o C. func(int, double);o D. 编译器产生错误。

答案: A解析: 由于只传递了一个整型参数,func(int)将被调用。

4.函数重载时,哪个元素可以用于区分重载函数?o A. 函数的返回类型。

o B. 函数名。

o C. 参数列表。

o D. 函数的注释。

答案: C解析: 函数重载是通过参数列表的不同来区分的,包括参数数量、类型或顺序。

5.内联函数的主要优点是什么?o A. 减少代码量。

o B. 加快函数调用速度。

o C. 增加程序的可读性。

o D. 减少内存使用。

答案: B解析: 内联函数减少函数调用的开销,从而可能提高程序运行速度。

6.是否可以重载C++中的运算符?o A. 不能重载任何运算符。

o B. 只能重载已存在的运算符。

o C. 可以创建新的运算符。

o D. 可以重载任何运算符,包括类型转换运算符。

答案: B解析: C++允许重载大部分已存在的运算符,但不能创建新的运算符。

7.以下哪个不是内联函数的潜在缺点?o A. 潜在的代码膨胀。

实验5 函数与重载

实验5 函数与重载

实验5 函数与重载一、实验目的1.掌握函数的声明、调用、实参与形参的值传递关系、返回值;2.理解函数重载,掌握函数重载的方法;3.理解递归的概念,掌握递归函数的定义与使用;二、实验内容及步骤时1.求三个数中最大的数(分别考虑整数、双精度数、长整数的情况)。

实验步骤:(1)分析问题,并确定变量的个数及类型和重载函数;(2)写出头文件及变量定义;(3)编写程序,运行并调试程序(4)输出正确的结果疑难:使用重载函数,的特点是:(1)函数名相同(2)函数的形参个数不同或至少有一个形参的类型不同。

第一次调用是三个整形数,第二次调用是三个长整形数,第三次调用是三个double型的数。

程序:#include<iostream>using namespace std;void fun(int x,int y,int z);void fun (long x,long y,long z);void fun (double a,double b,double z);int main(){int x,y,z;cout<<"输入三个整数:";cin>>x>>y>>z;fun(x,y,z);long a,b,c;cout<<"输入三个长整形的数:";cin>>a>>b>>c;fun(a,b,c);double h,g,f;cout<<"输入三个双精度的数:";cin>>h>>g>>f;fun(h,g,f);system("pause");return 0;}void fun(int x,int y,int z){int max=x;if(x<y)max=y;if(max<z)max=z;cout<<”max=”<<max<<endl;}void fun(long x,long y,long z){long max=x;if(max<y)max=y;if(max<z)max=z;cout<<”max=”<<max<<endl;}void fun(double x,double y,double z){double max=x;if(max<y)max=y;if(max<z)max=z;cout<<”max=”<<max<<endl;}结果:输入三个整数:1 2 3max=3输入三个长整形的数:123 456 789max=789输入三个双精度的数:12.3 63.55 2364.356max=2364.36请按任意键继续. . .2.定义一个函数,判断三个整形边长能否构成三角形,如果是三角形,则判断它是否是直角三角形。

国家二级C++机试(运算符重载、模板和C++流)模拟试卷6(题后含答案及解析)

国家二级C++机试(运算符重载、模板和C++流)模拟试卷6(题后含答案及解析)

国家二级C++机试(运算符重载、模板和C++流)模拟试卷6(题后含答案及解析)题型有:1. 选择题选择题1.若在表达式y/x中,’’/’’是作为成员函数重载的运算符,则该表达式还可以表示为( )。

A.x.operator/(y)B.operator/(x,y)C.y.operator/(x)D.operator/(y,x)正确答案:C解析:运算符函数的函数名是由运算符前加关键字operator构成的。

所以当“/”作为运算符重载后,其格式为operator/。

所以其作为成员函数调用时的格式为y.operator/(x)。

知识模块:运算符重载2.有类定义如下:class Type{ public:Type(int i=0);Type operator-(int);friend Type operator+(Type,Type);private:int val;};若有对象定义Type c1;则下列语句序列中,错误的是( )。

A.Type(3)+c1;B.e1+Type(3);C.3-c1:D.c1-3;正确答案:C解析:由于在类Type中对“-”进行了重载,所以根据“-”重载的形式定义,c1-3是正确的,而3-c1是错误的表达式。

知识模块:运算符重载3.若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。

A.Data+(Data);B.Data operator+{Data};C.Data+operator{Data};D.operator+(Data,Data);正确答案:B解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。

运算符函数的函数名是由运算符前加关键字operator构成的。

知识模块:运算符重载4.若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。

A.operator long( )const;B.operator long(bigNumber);C.long operator long( )const;D.long operator long(BjgNumber);正确答案:A解析:在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。

实验5-1函数参考答案.doc

实验5-1函数参考答案.doc

日期实验报告实验5 C++函数、重载与函数模板应用 姓名学号•实验目的(1) 学习函数定义、调用、参数对应关系及传递方法。

(2) 学习重载的定义与应用。

C3)学习函数模板的定义与应用。

• 实验项目1 (项目1:学号lab3_l )⑴编写求2整数m 、n 最大公约数gcd ()和最小公倍数Lcm ()函数;⑵主程 序键盘输入2整数a 、b 作为分数的分子和分母,以a/b 形式输出显示,调 用gcd ()函数做化简运算,再输出显示2整数a 、b 的最大公约数、最小公 倍数和化简后的分式a'/b'。

主程序可重复计算运行。

•实验方法最大公约数(辗转算法):设m>n,⑴k=m%n,若k=0,则n 为最大公约 数;⑵否则,用n 做被除数,k 做除数,回⑴处循环继续。

最小公倍数 1cm : lcmXgcd=mXn, lcm=mXn/gcd•程序代码 ttinclude <iostream> using namespace std; int gcd (int m, int n){ int t;if(m<n) {t=m ;m=n;n=t;} do {t=m%n;m=n;n=t;}while(t!=0);return m; }C++程序设计语言int lcm(int m, int n){ int t;t二m1n/gcd (m, n);return t;}int main (){return 0;•实验结果•结果分析与收获T middl(T a, T b, T c){ T temp;if (b>a) {temp=a;a=b;b=temp;}if(c>a) {temp=a;a=c;c=temp;} if (b>c) return b;else return c;}1 实验项目2(项目2名:学号lab3_2)编写函数模板mid(),用于从3个数据同类型(整/单/双精度数/字符)数据中返回中间数。

C++程序设计与应用基础第三章重载习题答案

C++程序设计与应用基础第三章重载习题答案

第三章重载1、请完成下列填空题1)在C++中,只能重载为类的成员函数的运算符是_=_、__[]__、__()__、__->__。

2)利用成员函数对二元运算符重载,其左操作数为___This___,右操作数为___成员函数参数___。

3)单目运算符作为类成员函数重载时___没有___的参数;双目运算符作为___类成员函数___重载时需声明其右操作数,作为___友元函数___重载时需声明全部操作数。

4)设a和b是两个整型变量,a+b表示这两个变量的和:设c和d为浮点型变量,c+d也表示这两个变量的和。

这里的运算符+具有不同的用途,这是__运算符重载___的例子。

5)重载的运算符仍然保持其原来的优先级、___结合性___和___语法结构___。

6)C++中不能重载的运算符有___.___、__*___、___::___、___?:___和___sizof___。

2、编程题1)字符串连接需要两个操作数,即两个要被连接的字符串。

请按照以平方式实现operator +操作:string1=string2+string3答案:#include <iostream.h>#include <string.h>class String{public:String(int size=80){length=size;buf=new char[length+1];*buf='\0';}String(char *s){length=strlen(s);buf=new char[length+1];strcpy(buf,s);}String(const String& str){length=strlen(str.buf);buf=new char[length+1];strcpy(buf,str.buf);}~String(){delete[]buf;}String& operator =(const String& str){length=str.length;strcpy(buf,str.buf);return *this;}void Print(){cout<<buf<<endl;}friend String operator +(const String& str1,const String& str2){String temp(strlen(str1.buf)+strlen(str2.buf)+1);strcpy(temp.buf,str1.buf);strcat(temp.buf,str2.buf);return temp;}private:char *buf;int length;};void main(){String str1,str2("Hello,"),str3("everyone!");str1=str2+str3;str1.Print();}2)给th类:class Three-d{public:Three_d(int I,int j,int k){x=I;y=j;z=k;}.Three_d()){x=0;y=0;z=0;}V oid Get(int &I,int &j,int &k({I=x;j=y;k=z;}private:int x,y,z;};针对给出的类,重载"+"、"++"与"一"运算符(只重载前缀方式即可)。

c运算符的重载习题答案

c运算符的重载习题答案

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

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

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

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

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

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

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

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

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

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中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。

重载函数——精选推荐

重载函数——精选推荐

重载函数出现在相同作⽤域中的两个函数,如果具有相同的名字⽽形参表不同,则称为重载函数。

函数重载和重复声明的区别如果两个函数声明的返回类型和形参表完全匹配,则将第⼆个函数声明视为第⼀个的重复声明。

如果两个函数的形参表完全相同,但返回类型不同,则第⼆个声明是错误的:Record lookup(const Account&);bool lookup(const Account&); // error: only return type is different函数不能仅仅基于不同的返回类型⽽实现重载。

值得注意的是,形参与 const 形参的等价性仅适⽤于⾮引⽤形参。

有 const 引⽤形参的函数与有⾮ const 引⽤形参的函数是不同的。

类似地,如果函数带有指向 const 类型的指针形参,则与带有指向相同类型的⾮ const 对象的指针形参的函数不相同。

重载与作⽤域在函数中局部声明的名字将屏蔽在全局作⽤域(内声明的同名名字。

这个关于变量名字的性质对于函数名同样成⽴.⼀般的作⽤域规则同样适⽤于重载函数名。

如果局部地声明⼀个函数,则该函数将屏蔽⽽不是重载在外层作⽤域中声明的同名函数。

由此推论,每⼀个版本的重载函数都应在同⼀个作⽤域中声明。

⼀般来说,局部地声明函数是⼀种不明智的选择。

函数的声明应放在头⽂件中。

函数匹配与实参转换函数重载确定,即函数匹配是将函数调⽤与重载函数集合中的⼀个函数相关联的过程。

通过⾃动提取函数调⽤中实际使⽤的实参与重载集合中各个函数提供的形参做⽐较,编译器实现该调⽤与函数的匹配。

匹配结果有三种可能:1. 编译器找到与实参最佳匹配的函数,并⽣成调⽤该函数的代码。

2. 找不到形参与函数调⽤的实参匹配的函数,在这种情况下,编译器将给出编译错误信息。

3. 存在多个与实参匹配的函数,但没有⼀个是明显的最佳选择。

这种情况也是,该调⽤具有⼆义性。

⼤多数情况下,编译器都可以直接明确地判断⼀个实际的调⽤是否合法,如果合法,则应该调⽤哪⼀个函数。

国家二级C++机试(运算符重载、C++流)模拟试卷2(题后含答案及解析)

国家二级C++机试(运算符重载、C++流)模拟试卷2(题后含答案及解析)

国家二级C++机试(运算符重载、C++流)模拟试卷2(题后含答案及解析)题型有:1. 选择题选择题1.关于运算符重载,下列表述中正确的是( )。

A.C++已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型D.可以通过运算符重载来创建C++中原来没有的运算符正确答案:C解析:此题考查的是运算符重载的概念。

C++语言规定,“.”、“.*”、“->*”、“::”和“?:”这五个运算符不能被重载,故选项A错误:运算符函数的返回类型由该运算符所组成的表达式的值的类型来决定,故选项B说法是错误的;运算符重载是针对原有运算符,并不能通过重载创造出新的运算符,故选项D错误。

知识模块:运算符重载2.下列关于运算符重载的描述中,正确的是( )。

A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B.一元运算符只能作为成员函数重载C.二元运算符重载为非成员函数时,参数表中有一个参数D.C++中可以重载所有的运算符正确答案:A解析:此题考查的是运算符的重载。

运算符重载为成员函数时,形参个数一般为运算符元数减1:重载为非成员函数时,形参个数一般和运算符元数相等。

所以二元运算符重载为非成员函数时,参数表中应有两个参数,C选项错误;运算符重载为成员函数,若参数表中无参数,重载的是一元运算符,选项A正确:一元运算符中,“-”(取负)、“++”、“--”等均可重载为成员函数;C++语言中,“.”、“.*”、“->*”、“::”、“?:”五个运算符不能重载。

知识模块:运算符重载3.运算符重载时不需要保持的性质是( )。

A.操作数个数B.操作数类型C.优先级D.结合性正确答案:B解析:运算符重载应该体现为原有运算符的功能在新的数据类型上的延伸。

重载的运算符保持原有运算符的操作个数、优先级和结合性三个最基本的特征。

知识模块:运算符重载4.下列关于运算符重载的描述中,错误的是( )。

C++运算符重载题库及答案

C++运算符重载题库及答案

运算符重载一.单项选择题1.下列运算符中,运算符在C++中不能重载。

A.?:B.+C.D.<=解:C++中不能被重载的运算符有:·,一,::,?:。

本题答案为A。

2.下列运算符中,运算符在C++中不能重载。

A.&&B.[]C.::D.new解:c++中不能被重载的运算符有:·,·+,::,?:。

本题答案为c。

3.下列关于运算符重载的描述中,是正确的。

A.运算符重载可以改变操作数的个数B.运算符重载可以改变优先级C.运算符重载可以改变结合性D.运算符重载不可以改变语法结构解:运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算程的语法结构。

本题答案为D。

4.友元运算符objl>obj2被C++编译器解释为。

A.operator>(objl,obj2) B.>(obj1,obj2)C.obj2.operator:>(obj1) D.objl.operator>(obj2)解:重载为友元函数的运算符的调用形式如下:operator<运算符>(<参数,<参数2>)等价于:<参数1><运算符><参数2>本题答案为A。

5.现需要对list类对象使用的逻辑运算符“==”重载,以下函数声明是正确的。

A、list&list::operator==(const list&a) ;B、list list::operator==(const list&a) ;C、bool&list::operator==(const list&a);D、bool list::operator==(const list&a);6.以下类中分别说明了“+=”和“++”运算符重载函数的原型。

如果主函数中有定义:fun m,c,d;,那么,执行语句c=m++;时,编译器把m++解释为:(3)A)c.o p e r a t o r++(m);B)m=o p e r a t o r++(m);C)m.o p e r a t o r++(m);D)o p e r a t o r++(m);class fun{public:....f u n o p e r a t o r+=(f u n);f r i e n d f u n o p e r a t o r++(f u n&,i n t);};答案:D7.在第33题中,当执行语句d+=m;时,C++编译器对语句作如下解释:(34)A.d=operator+=(m);B.m=operator+=(d);C. d.operator+=(m);D.m.operator+=(d);答案:C8.设有以下类定义,其中说明了“+”运算符重载函数的原型。

实验七-运算符重载参考答案

实验七-运算符重载参考答案

实验七-运算符重载参考答案实验七多态性—函数与运算符重载7.1 实验目的1.理解掌握成员函数方式运算符重载;2.理解掌握友元函数方式运算符重载;3.理解掌握++、--运算符的重载。

7.2 实验内容7.2.1程序阅读1.理解下面的程序,并运行查看结果,回答程序后面的问题。

#include <iostream>using namespace std;class CComplex{public:CComplex(){real = 0;imag = 0;}CComplex(int x,int y){real = x;imag = y;}int real;int imag;CComplex operator + (CComplex obj1)//---------------------------------------------①{CComplex obj2(real - obj1.real, imag - obj1.imag);return obj2;}};int main(){CComplex obj1(100,30);CComplex obj2(20, 30);CComplex obj;obj = obj1+obj2; //------------------------------------------------------------------②cout << obj.real <<endl;cout << obj.imag << endl;return 0;}问题一:①处的运算符重载,为什么该函数的返回值要设计成CComplex类型?答:因为在函数中return obj2,obj2是CComplex 类型,所以函数返回值要与return返回的类型相同,即设计成CComplex类型。

问题二:②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数?答:因为成员函数经编译后会产生this指针,this指针会指向调用该函数的obj1对象,该obj1对象就是就相当于函数的第一个参数。

函数重载练习题

函数重载练习题

.函数重载练习题请编写求两个数之和的函数,要求使用函数重载,能求整数、长整型、浮点、1. 双精度等数的和。

两个长整能求两个整数、请编写求两个数中最大数的函数,要求使用函数重载,型、两个浮点、两个双精度等数的最大数。

)(拓展版(内联)) m intint n, inline int max({);nmn ? : return (m >}) , double m inline double max(double n{); n return ( m > n ? m :}) float n, float m floatinline max({); nn ? m : m return ( >}2.编写一函数,使用函数重载,能求两个整数的最大数、三个整数的最大数、四3. 个整数的最大数。

定义函数重载,分别将两个整数升序排列后输出、三个整数升序排列后输出、4. 升序排列后输出。

四个整数)(忘了怎么用调用函数写重载了) m, int void f(int n{= t; } ; n; m = nn if ( m < ) { int t = m;m<<n<<'\t'<< coutendl;<<cout}) k, int mn void f(int , int{= t; } > if ( nm) { int m; = n; nm t == t; } ; = t = k) { int n; nkk> if(n= t; } m; = t = ) { < if(km int k; km endl; <<k<<'\t'<< m<<'\t'<<n<<cout}要求第一个函数函数和一个主函数。

包含三个重载的display5.编写一个程序,int 一个double 值,前面用字符串“a double:”引导,第二个函数输出输出字符值,前面char值,前面用字符串“a char:”引导,第三个函数输出一个型变量作charint ”引导,在主函数中分别用double、和a char:用字符串“ display函数。

java方法重载练习题.doc

java方法重载练习题.doc

java方法重载练习题public class FunctionOverload public static void main(print;int suml - sum;print;print;int sum- sum;print;print;double sum- sum;print;print;printCFB;print;printCFB;}〃两个整数求和public static int sum{return a + b;//三个整数求和public static int sum{ return a + b + c;}〃两个小数求和public static double sum{ return a + b;}〃打印乘法表到不确定的一个数public static void printCFB { for {for {System, out. print;}System, out. printin;}1〃打印九九乘法表public static void printCFB{ printCFB;//输出函数public static void print (System, out. printin;}}2练习六1、为了区分重载多态中同名的不同方法,要求。

A)采用不同的参数列表B)返回值类型不同0调用时用类名或对象名做前缀D)参数名不同2、定义主类的类头时可以使用的访问控制符是。

A)privateB) protectedC) publicD) private protected3、下列整型的最终属性i的定义中,正确的是。

A)static final int i-100:B) final int i:C) static int i:D) final float i-1. 2f:4、设x, y均为己定义的类名,下列声明对象xl的语句中正确的是。

A)public x xl- new y; B) x xl-x:C) x xl-new x; D) int x xl:5、下列方法定义中,正确的是。

运算符重载程序例题解答

运算符重载程序例题解答

/*1.定义一个复数类,通过重载运算符:+、-、*、/ 等,实现两个复数之间的各种运算。

编写一个完整的程序。

*/#include<iostream.h>class Complex{float Real,Image;public:Complex(float x=0,float y=0){Real=x;Image=y;}friend Complex operator + (Complex &,Complex &);friend Complex operator - (Complex &,Complex &);friend Complex operator * (Complex &,Complex &);friend Complex operator / (Complex &,Complex &);void show(){cout<<"Real="<<Real<<'\t'<<"Image="<<Image<<endl;}};Complex operator + (Complex &a,Complex &b){Complex t;t.Real=a.Real+b.Real;t.Image=a.Image+b.Image;return t;}Complex operator - (Complex &a,Complex &b){Complex t;t.Real=a.Real-b.Real;t.Image=a.Image-b.Image;return t;}Complex operator * (Complex &a,Complex &b){Complex t;t.Real=a.Real*b.Real-a.Image*b.Image;t.Image=a.Real*b.Image+a.Image*a.Real;return t;}Complex operator / (Complex &a,Complex &b){Complex t;t.Real=(a.Real*b.Real+a.Image*b.Image)/(b.Real*b.Real+b.Image*b.Image);t.Image=(a.Image*a.Real-a.Real*b.Image)/(b.Real*b.Real+b.Image*b.Image);return t;}{Complex c1(10,20),c2,c3(50,40);c2=c1+c3;c2.show();c2=c1-c3;c2.show();c2=c1*c3;c2.show();c2=c1/c3;c2.show();}/*2.定义描述一个三维点,利用友元函数重载"++"和"--"运算符,并区分这两种运算符的前置和后置运算。

函数重载练习题

函数重载练习题

填空题:运算符[]只能通过(成员函数)运算符来重载,不能用友元函数来重载1.假定要对类C定义加号操作符重载成员函数,实现两个C类对象的加法,并返回相加结果,则该成员函数的声明语句为()。

A. C operator+( C a , C & b)B. C operator+(C & a)C. operator+(C a)D. C & operator+( )答案B2.关于函数重载的叙述中,错误的是A.函数重载就是用相同的函数名定义多个函数B.重载函数的参数列表必须不同C.重载函数的返回值类型必须不同D.重载函数的参数可以带有默认值答案C【解析】A就算他对的B,正确C,错的,返回值可以相同D。

对的,重载函数可以有默认参数。

3.关于运算符重载的叙述中,正确的是()A.运算符重载是多态性的一种表现B.C++中可以通过运算符重载创造新的运算符C.C++中所有运算符都可以作为非成员函数重载D.重载运算符时可以改变其优先级别和结合性答案A4.通过运算符重载,可以改变运算符原有的()A.操作数类型B.操作数个数C.优先级D.结合性答案A5.将前缀运算符"--"重载为非成员函数,下列原型中能正确用于类中说明的是()A.Decr&operator-- (int);B.Decr&operator-- (Decr&,int);C.friend Decr&operator-- (Decr&);D.friend Decr operator-- (Decr&,int);答案C6.下列运算符函数中肯定不属于类FunNumeber的成员函数的是:A.int operator-(FunNumber)B.FunNumber operator -();C.FunNumber operator -(int);D.int operator -( FunNumber, FunNumber);答案D【解析】本题考查的知识点是:运算符“-”的重载。

C 重载习题资料

C  重载习题资料

01.分析以下程序执行结果#include<iostream.h>int add(int x,int y){return x+y;}double add(double x,double y){return x+y;}void main(){int a=4,b=6;double c=2.6,d=7.4;cout<<add(a,b)<<","<<add(c,d)<<endl;}解:本题说明函数重载的使用方法,这里有两个add()函数,一个add()函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的。

所以输出为: 10,10-----------------------------------------------02.分析以下程序的执行结果#include<iostream.h>class Sample{int i;double d;public:void setdata(int n){i=n;}void setdata(double x){d=x;}void disp(){cout<<"i="<<i<<",d="<<d<<endl;}};void main(){Sample s;s.setdata(10);s.setdata(15.6);s.disp();}解:本题说明重载成员函数的使用方法。

setdata()成员函数有两个,根据其参数类型加以区分。

所以输出为:i=10, d=15.6-----------------------------------------------03.分析以下程序的执行结果#include<iostream.h>class Sample{int n;public:Sample(){}Sample(int i){n=i;}Sample &operator =(Sample);void disp(){cout<<"n="<<n<<endl;}};Sample &Sample::operator=(Sample s){Sample::n=s.n;return *this;}void main(){Sample s1(10),s2;s2=s1;s2.disp();}解:本题说明重载运算符(=)的使用方法。

C++面向对象程序设计教程课后习题答案

C++面向对象程序设计教程课后习题答案

// 定义变量
for (i = 0; i < n- 1; i++)
for (j = i + 1; j < n; j++)
if (a[i] > a[j])
{
// a[i]比a[j]更大
tem = a[i]; a[i] = a[j]; a[j] = tem;
}
}
……
a
9
*5.编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可
system("PAUSE"); // 调用库函数system( ),输出提示信息
return 0;
// 返回a值, 返回操作系统
7
}
4.用变量的引用作函数形参,实现交换两个整型变量,要求编写测试程序。
参考程序:
#include <iostream>
// 编译预处理命令
using namespace std;
double c[] = {1.2, 3.1, 2.6, 5.8, 6.8, 9.8, 0.8, 6.2};// 定义c
int i, n = 8;
// 定义变量
Sort(a, n); cout << "a:"; for (i = 0; i < n; i++)
cout << a[i] << " "; cout << endl;
m = m > z ? m : z; // m,z的最大值
return m;
// 返回x,y,z的最大值
}
int main()
// 主函数main()

C++实验3成员函数的重载

C++实验3成员函数的重载

实验3 成员函数的重载1.实验目的及要求:1)掌握普通函数重载的方法;2)掌握成员函数重载的方法;2.实验内容:2.1分析下面的程序,指出程序运行的结果:class ListClass{int *List ;unsigned nMax ;unsigned nElem ;public:void Init (int n=10){List=new int [n] ;nMax=n ;nElem=0 ;}int Elem(int);int &Elem(unsigned n){return List [n] ;}unsigned Elem(void) {return nElem ;}unsigned Max (void){return nMax ;}void Print (void) ;int GetElem(int i){if((i>=0)&&(i<=nElem))return List [i] ;else return 0;}void Destroy (void) {delete [nMax]List ;}};int ListClass ::Elem(int elem){if(nElem<nMax){List[nElem++]=elem;return nElem ;}else{int*list ;list=new int [nMax+1];for(int i=0 ; i<nElem ; i++) list [i]=List[i] ;delete [nMax]List ;nMax++ ;List=list;List[nElem++]=elem ;return nElem ;}}void ListClass ::Print(void){for(int i=0 ;i<nElem ; i++) cout <<List[i]<<'\t';cout<<'\n';}void main (void ){ ListClass list ,list1;list.Init(10);list1.Init(20);for (int i=0 ; i<10 ; i++)list1.Elem(i) ;cout<<"线性表list的元素的个数为:"<<list.Elem()<<'\n' ;cout<<"线性表list长度为:"<<list.Max()<<'\n' ;cout<<"线性表list1的元素的个数为::"<<list1.Elem()<<'\n' ;cout<<"线性表list1长度为:"<<list1.Max()<<'\n';list1.Print();list1.Elem(3u)=100 ;cout<<"现在线性表list1中的第三个值为:"<<list1.Elem(3u)<<'\n' ;list1.Elem(20);list1.Elem (200);cout<<"现在线性表list1中元素的个数为:"<<list1.Elem()<<'\n' ;list1.Print();cout<<"现在线性表list1中的最后一个元素为:"<<list1.GetElem(list1.Elem()-1)<<'\n' ;list.Destroy();list1.Destroy();}程序执行过程如下:程序运行情况和结果如下:3.2 编写并调试程序:1) 使用函数重载的方法定义两个重名函数,分别求出整型数的两点间距离和实型数的两点间距离。

国家二级C++机试(运算符重载)模拟试卷6(题后含答案及解析)_0

国家二级C++机试(运算符重载)模拟试卷6(题后含答案及解析)_0

国家二级C++机试(运算符重载)模拟试卷6(题后含答案及解析) 题型有:1. 选择题选择题1.有如下程序:#inc1ude<iostream>Using namespace std; Class Amount{ int amount; public; Amount(int n=0): amount(n){} Int getAmount( )const {retum amount;} Amount &operator+=(Amount a){ amount+=a.amount; retum ; } };int main( ){ Amount x(3),y(7);x+=y;cout<<x.getAmount( )<<end1; retum 0;} 已知程序的运行结果是10,则下划线处缺失的表达式是( )。

A.*thisB.thisC.&amountD.amount正确答案:A解析:此题考查的是“+”运算符重载和this指针。

语句amount+=a.amount;实现3和7的求和得到amount=10,要使程序的输出结果为10,又因为函数的返回值类型为Amount&,所以横线处填入*this。

知识模块:运算符重载2.如果表达式a>=b中的“>=”是作为非成员函数重载的运算符,则可以等效地表示为( )。

A.a.operator>=(b)B.b.operatotr>=(a)C.operator>=(a,b)D.operator>=(b,a)正确答案:C解析:运算符函数作为非成员函数时,没有隐含的this指针,因此所有的操作数必须出现在参数表中,对于二元运算符,参数表中有两个参数,分别代表第一操作数和第二操作数,且顺序不能改变。

知识模块:运算符重载3.已知表达式++a中的“++”是作为成员函数重载的运算符,则与++a等效的运算符函数调用形式为( )。

A.a.operator++(1)B.operator++(a)C.operator++(a,1)D.a.operator++( )正确答案:C解析:本题主要是对运算符霞载的考查。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

++习题与解析-重载时间:2010-05-19 12:13:47 来源:第二电脑网作者:第二电脑网第二电脑网导读:t<<add(a,b)<<","<<add(c,d)<<endl; } 解:本题说明函数重载的使用方法,这里有两个add()函数,一个add()函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的。

所以输出为: 10,10 ----------------------------------------------- 02.分析以下程序的执行结果 #include<iostrea...正文:01.分析以下程序执行结果#include<iostream.h>int add(int x,int y){return x+y;}double add(double x,double y){return x+y;}void main(){int a=4,b=6;double c=2.6,d=7.4;cout<<add(a,b)<<","<<add(c,d)<<endl;}解:本题说明函数重载的使用方法,这里有两个add()函数,一个add()函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的。

所以输出为: 10,10-----------------------------------------------02.分析以下程序的执行结果#include<iostream.h>class Sample{int i;double d;public:void setdata(int n){i=n;}void setdata(double x){d=x;}void disp(){cout<<"i="<<i<<",d="<<d<<endl;}};void main(){Sample s;s.setdata(10);s.setdata(15.6);s.disp();}解:本题说明重载成员函数的使用方法。

setdata()成员函数有两个,根据其参数类型加以区分。

所以输出为:i=10, d=15.6-----------------------------------------------03.分析以下程序的执行结果#include<iostream.h>class Sample{int n;public:Sample(){}Sample(int i){n=i;}Sample &operator =(Sample);void disp(){cout<<"n="<<n<<endl;}};Sample &Sample::operator=(Sample s){Sample::n=s.n;return *this;}void main(){Sample s1(10),s2;s2=s1;s2.disp();}解:本题说明重载运算符(=)的使用方法。

operator=成员函数实现两个对象的赋值。

所以输出为: n=10-------------------------------------------------04.设计一个点类Point,实现点对象之间的各种运算。

解:Point类提供了6个运算符重载函数(参加程序中的代码和注释),以实现相应的运算。

本题程序如下:#include<iostream.h>class Point{int x,y;public:Point(){x=y=0;}Point(int i,int j){x=i;y=j;}Point(Point &);~Point(){}void offset(int,int); // 提供对点的偏移void offset(Point); // 重载,偏移量用Point类对象表示bool operator==(Point); // 运算符重载,判断两个对象是否相同bool operator!=(Point); // 运算符重载,判断两个对象是否不相同void operator+=(Point); // 运算符重载,将两个点对象相加void operator-=(Point); // 运算符重载,将两个点对象相减Point operator+(Point ); // 运算符重载,相加并将结果放在左操作数中Point operator-(Point); // 运算符重载,相减并将结果放在左操作数中int getx(){return x;}int gety(){return y;}void disp(){cout<<"("<<x<<","<<y<<")"<<endl;}};Point::Point(Point &p){x=p.x; y=p.y;}void Point::offset(int i,int j){x+=i; y+=j;}void Point::offset(Point p){x+=p.getx(); y+=p.gety();}bool Point::operator==(Point p){if(x==p.getx()&&y==p.gety())return 1;elsereturn 0;}bool Point::operator!=(Point p){if(x!=p.getx()||y!=p.gety())return 1;elsereturn 0;}void Point::operator+=(Point p){x+=p.getx(); y+=p.gety();}void Point::operator-=(Point p){x-=p.getx(); y-=p.gety();}Point Point::operator+(Point p){this->x+=p.x; this->y+=p.y;return *this;}Point Point::operator-(Point p){this->x-=p.x;this->y-=p.y;return *this;}void main(){Point p1(2,3),p2(3,4),p3(p2);cout<<"1:"; p3.disp();p3.offset(10,10);cout<<"2:"; p3.disp();cout<<"3:"<<(p2==p3)<<endl;cout<<"4:"<<(p2!=p3)<<endl;p3+=p1;cout<<"5:"; p3.disp();p3-=p2;cout<<"6:"; p3.disp();p3=p1+p3; // 先将p1+p3的结果放在p1中,然后赋给p3,所以p1=p3 cout<<"7:"; p3.disp();p3=p1-p2;cout<<"8:"; p3.disp();}本程序的执行结果如下:来源:/master/College/Language/VC/2010-05-19/14206第二电脑网导读:t<<add(a,b)<<","<<add(c,d)<<endl; } 解:本题说明函数重载的使用方法,这里有两个add()函数,一个add()函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的。

所以输出为: 10,10 ----------------------------------------------- 02.分析以下程序的执行结果 #include<iostrea...正文:1:(3,4)2:(13,14)3:04:15:(15,17)6:(12,13)7:(14,16)8:(11,12)----------------------------------------------------05.设计一个日期类Date,包括年、月、日等私有数据成员。

要求实现日期的基础运算,如一日期加上天数、一日期减去天数、两日期相差的天数等。

解:在Date类中设计如下重载运算符函数:Date operator+(int days); 返回一日期加一天数得到的日期Date operator-(int days); 返回一日期减去天数得到的日期int operator-(Date &b); 返回两日期相差的天数在实现这些重载运算符函数调用以下私有成员函数:leap(int); 判断指定的年份是否为闰年dton(Date &); 将指定日期转换为从0年0月0日起的天数ntod(int); 将指定的0年0月0日起的天数转换为对应的日期本题程序如下:#include<iostream.h>int day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,31,30,31,30,31}};// day_tab 二维数组存放各月天数,第一行对应非闰年,第二行对应闰年class Date{int year,month,day;int leap(int);int dton(Date &);Date ntod(int);public:Date(){}Date(int y,int m,int d){year=y;month=m;day=d;}void setday(int d){day=d;}void setmonth(int m){month=m;}void setyear(int y){year=y;}int getday(){return day;}int getmonth(){return month;}int getyear(){return year;}Date operator+(int days){static Date date;int number=dton(*this)+days;date=ntod(number);return date;}Date operator-(int days){static Date date;int number=dton(*this);number-=days;date=ntod(number);return date;}int operator-(Date &b){int days=dton(*this)-dton(b)-1;return days;}void disp(){cout<<year<<"."<<month<<"."<<day<<endl;}};int Date::leap(int year){if(year%4==0&&year%100!=0||year%400==0) // 是闰年return 1;else // 不是闰年return 0;}int Date::dton(Date &d) {int y,m,days=0;for(y=1;y<=d.year;y++) if(leap(y))days+=366;elsedays+=365;for(m=0;m<d.month-1;m++) if(leap(d.year))days+=day_tab[1][m]; elsedays+=day_tab[0][m]; days+=d.day;return days;}Date Date::ntod(int n) {int y=1,m=1,d,rest=n,lp; while(1){if(leap(y)){if(rest<=366)break;elserest-=366;}else{if(rest<=365)break;elserest-=365;}y++;}y--;lp=leap(y);while(1){if(lp){if(rest>day_tab[1][m-1])rest-=day_tab[1][m-1];elsebreak;}else{if(rest>day_tab[0][m-1])rest-=day_tab[0][m-1];elsebreak;}m++;}d=rest;return Date(y,m,d);}void main(){Date now(2002,6,12),then(2003,2,10); cout<<"now:"; now.disp();cout<<"then:"; then.disp();cout<<"相差天数:"<<(then-now)<<endl; Date d1=now+100,d2=now-100;cout<<"now+100:"; d1.disp();cout<<"now-100:"; d2.disp();}本程序的执行结果如下:now:2002.6.12then:2003.2.10相差天数:242now+100:2002.9.20now-100:2002.3.4题1.分析以下程序的执行结果#include<iostream.h>int add(int x,int y){return x+y;}int add(int x,int y,int z){return x+y+z;}void main(){int a=4,b=6,c=10;cout<<add(a,b)<<","<<add(a,b,c)<<endl;}解:本题说明重载函数的使用方法。

相关文档
最新文档