国家二级C++机试(运算符重载、模板和C++流)模拟试卷2
选择题
1.若在表达式y/x中,’’/’’是作为成员函数重载的运算符,则该表达式还可以表示为( )。(C)
A. x.operator/(y)
B. operator/(x,y)
C. y.operator/(x)
D. operator/(y,x)
解析:运算符函数的函数名是由运算符前加关键字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;则下列语句序列中,错误的是( )。(C)
A. Type(3)+c1;
B. e1+Type(3);
C. 3-c1:
D. c1-3;
解析:由于在类Type中对“-”进行了重载,所以根据“-”重载的形式定义,c1-3是正确的,而3-c1是错误的表达式。
3.若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。(B)
A. Data+(Data);
B. Data operator+{Data};
C. Data+operator{Data};
D. operator+(Data,Data);
解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。运算符函数的函数名是由运算符前加关键字operator构成的。
4.若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。(A)
A. operator long()const;
B. operator long(bigNumber);
C. long operator long()const;
D. long operator long(BjgNumber);
解析:在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。
5.有如下类模板定义:
template<typename T>
class BigNumber{
long n:
public:
BigNumber(T i):n(i){}
BigNumber operator+(BigNumber b){
return BigNtmaber(n+b.n);
}
}
已知b1、b2是,BigNumber的两个对象,则下列表达式中错误的是( )。(C)
A. b1+b2
B. b1+3
C. 3+b1
D. 3+3
解析:C++运算符的重载有两个方式,一种是做为成员函数,另一种是做为友元函数。前种C++默认省略第一个参数(事实上是对象本身),而后一种是所有的参数都要写全。比如对加法的重载:成员方式为COperator operator+(COperator&op);,在调用的过程中我们可以理解为result=operator+(op);友元方式为friend COperator operator.(COperator&op1,COperator&op2);,在调用的过程中我们可以理解为result=operator-(op1,op2);。
对于本题题来说,整数3与b1相加时,3是诚型,b1是BigNumber<T>型,int型不能和别的型做运算。
6.为类Matrix重载下列运算符时,只能作为Matrix类成员函数重载的运算符是( )。(B)
A. +
B. =
C. <<
D. ++
解析:在C++中,=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载。
7.若为Fraction类重载前增1运算符++,应在类体中将其声明为( )。(A)
A. Fraction&operator++();
B. Fraction&operator++(int);
C. friend Fraction&operator++();
D. friend Fraction&operator++(int);
解析:在类Fraction中重载前增1运算符++时,其声明形式为Fraction&operator++();在类Fraction中重载后增1运算符十+时,其声明形式为Fraction&operatorH(int);。
8.若需要为XV类重载乘法运算符,运算结果为XV类型,在将其声明为类的成员函数时,下列原型声明正确的是( )。(D)
A. XV operator*(XV,XV);
B. XV*(XV);
C. operator*(XV);
D. XV operator*(XV);
解析:“*”是一个二元运算符,在作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数就是对象本身,仅以this指针的形式隐藏在参数表中。
9.已知类MyClock中未显式定义构造函数,并重载了加法运算符,使得下面的语句序列能够正确执行:
MyClock c1,c2;
//……
c2=c1+10;
由此可知:为类MyClock重载的“+”运算符函数的声明是( )。(A)
A. friend MyClock operator+(MyClock,int);
B. friend MyClock operator+(MyClock,MyClock);
C. friend MyClock operator+(int,MyClock);
D. MyClock operator+(MyClock);
解析:由表达式c2=c1+10可知,在对“+”进行重载时,第一操作数是MyClock类的对象,而第二操作数是一个整型数据。
10.已知将运算符’’+’’和’’*’’作为类Complex的成员函数重载,设c1和c2是类Complex的对象,则表达式c1+c2*c1等价于( )。(B)
A. c1.operator*(c2.operator+(c1))
B. c1.operator+(c2.operator*(c1))
C. c1.operator*(c1.operator+(c2))
D. c2.operator+(c1.operator*(c1))
解析:表达式c1+c2*c1的含义是c1加上c2与c1的积。
11.下列运算符不能重载为友元函数的是( )。(A)
A. =() [] ->
B. + – ++ —
本文档预览:3600字符,共8109字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载