国家二级C++机试(运算符重载、模板和C++流)模拟试卷6
选择题
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.若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。(B)
A. Data+(Data);
B. Data operator+{Data};
C. Data+operator{Data};
D. operator+(Data,Data);
解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。运算符函数的函数名是由运算符前加关键字operator构成的。
3.若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。(A)
A. operator long()const;
B. operator long(bigNumber);
C. long operator long()const;
D. long operator long(BjgNumber);
解析:在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。
4.有如下类模板定义:
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型不能和别的型做运算。
5.为类Matrix重载下列运算符时,只能作为Matrix类成员函数重载的运算符是( )。(B)
A. +
B. =
C. <<
D. ++
解析:在C++中,=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载。
6.有如下类定义
class MyClass
public:
_________
Private:
int data;
};
若要为MyClass类重载流输入运算符>>,使得程序中可以“cin>>obj;”形式输入MyClass类的对象obj,则横线处的声明语句应为( )。(A)
A. friend istream&operator>>(istream&is,MyClass&a);
B. friend istream&operator>>(istream&is,MyClass a);
C. istream&operator>>(istream&is,MyClass&a);
D. istream&operator>>(istream&is,MyClass a);
解析:C++的输入运算符>>作为非类成员函数重载。在一个类中,可将输入运算符>>声明为友元函数,在类MyClass重载输入运算符>>的形式如选项A所示。
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))
本文档预览:3600字符,共7927字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载