国家二级C++机试(运算符重载)模拟试卷6
选择题
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)
A. *this
B. this
C. &amount
D. amount
解析:此题考查的是“+”运算符重载和this指针。语句amount+=a.amount;实现3和7的求和得到amount=10,要使程序的输出结果为10,又因为函数的返回值类型为Amount&,所以横线处填入*this。
2.如果表达式a>=b中的“>=”是作为非成员函数重载的运算符,则可以等效地表示为( )。(C)
A. a.operator>=(b)
B. b.operatotr>=(a)
C. operator>=(a,b)
D. operator>=(b,a)
解析:运算符函数作为非成员函数时,没有隐含的this指针,因此所有的操作数必须出现在参数表中,对于二元运算符,参数表中有两个参数,分别代表第一操作数和第二操作数,且顺序不能改变。
3.已知表达式++a中的“++”是作为成员函数重载的运算符,则与++a等效的运算符函数调用形式为( )。(C)
A. a.operator++(1)
B. operator++(a)
C. operator++(a,1)
D. a.operator++()
解析:本题主要是对运算符霞载的考查。“++”实现增加1,所以除了a之外的另一个参数默认为1。
4.有如下程序:
#inc1ude<iostream>
using namespace std;
c1ass Pair{
int m;
int n;
public:
Pair (int i,int j): m(i), n(j){}
bool operator>(Pair p)const; //须在类体外给出定义
};
int main(){
Pair p1(3,4), p2(4,3), p3(4,5);
cout<<(p1>p2)<<(p2>p1)<<(p2>p3)<<(p3>p2);
return 0;
}
运算符函数。perator>的功能是比较两个Pair对象的大小,当左边对象大时,返回true,否则返回false。比较规则是首先比较两对象的m成员,m大者为大;当m相等时比较n,n大者为大。程序输出0101,下列对运算符重载函数的正确定义是( )。
A
解析:按照比较规则:首先比较两对象的m成员,m大者为大:当m相等时比较n,n大者为大。这条规则的用C++写出来就是选项A。
5.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是( )。(B)
A. 不合法的运算符
B. —元运算符
C. 无操作数的运算符
D. 二元运算符
解析:对于一元或二元运算符函数作为成员函数重载时,第一操作数就是对象本身,并不显式地出现在参数表中。即第一操作数仅以this指针的形式隐含存在于参数表中。因此,对于一元运算符参数表是空的;对于二元运算符参数表中只有一个参数,它代表第二操作数。
6.将前缀运算符“——”重载为非成员函数,下列原型中,能正确用于类中说明的是( )。(C)
A. Decr& operator——(int);
B. Decr operator——(Decr&, int);
C. friend Decr& operator—— (Decr&);
D. friend Decr operator——(Decr&,int);
解析:因为要作为非成员函数重载,所以加friend,作为前缀操作,其返回的操作结果是对该变量的引用,所以类型为Decr&,操作数出现在参数表中,应声明为引用,即Decr&。
7.将运算符“+\\(C)
A. MycIoCk operator+(MyClock, long);
B. MycIoCk operator+(MyClock, MyClock);
C. Myc1oCk operator+ (long, long);
D. MycIoCk operator+(long, MyClock);
解析:运算符重载不能有二义性,故选项C)不能区分运算符的准确含义。
8.有类定义如下:
c1ass 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. c1+Type(3);
C. 3—c1;
D. c1—3;
解析:由于在类Type中对“—”进行了重载,所以根据“—”重载的形式定义,c1—3是正确的,而3—c1是错误的表达式。
9.若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。(B)
A. Data+(Data);
B. Data operator+{Data};
C. Data+operator{Data};
D. operator+(Data,Data);
解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。运算符函数的函数名是由运算符前加关键字operator构成的。
10.若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。(A)
A. operator long()const;
B. operatorlong(bigNumber);
C. lo
本文档预览:3600字符,共6707字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载