函数重载习题与解析
++习题与解析-重载时间: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;}解:本题说明重载函数的使用方法。
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++函数重载与内联函数试题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 函数与重载一、实验目的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(题后含答案及解析)题型有: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 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++程序设计与应用基础第三章重载习题答案
第三章重载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运算符的重载习题答案
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(题后含答案及解析)题型有: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++运算符重载题库及答案
运算符重载一.单项选择题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.设有以下类定义,其中说明了“+”运算符重载函数的原型。
