计算机二级

有如下的运算符重载函数定义:double operator+(int i,int k){return double (i+ k);}但定义有错误,对这个错误最准确的描述是( )。A.“+”只能作为成员函数重载,而这里的“+”是作为非成员函数重载的B.两个int型参数的和也应该是int型,而这里将“+”的返回类型声明为doubleC.没有将运算符重载函数声明为某个类的友元D.C++已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符

题目

有如下的运算符重载函数定义:double operator+(int i,int k){return double (i+ k);}但定义有错误,对这个错误最准确的描述是( )。

A.“+”只能作为成员函数重载,而这里的“+”是作为非成员函数重载的

B.两个int型参数的和也应该是int型,而这里将“+”的返回类型声明为double

C.没有将运算符重载函数声明为某个类的友元

D.C++已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

( 33 )有如下的运算符重载函数定义:double operator +(int i, int k){ return double(i+k); }但 定义有错误,对这个错误最准确的描述是

A ) + 只能作为成员函数重载,而这里的 + 是作为非成员函数重载的

B ) 两个 int 型参数的和也应该是 int 型,而这里将 + 的返回类型声明为 double

C )没有将 运算符重载函数声明为某个类的友元

D ) C++ 已经提供了求两个 int 型数据之和的运算符 + ,不能再定义同样的运算符


正确答案:D

第2题:

( 14 )下面的函数定义是某函数模板能够生成的函数实例

int square(int n) {return n*n;}

double square(double n) {return n*n;}

由此可知,该函数模板的定义是 【 15 】 。


正确答案:

第3题:

有如下的运算重载函数定义:

Double operator+(int i, int k){return double(i+k);}

但定义有错误,对这个错误的最准确的描述是______。

A.+只能作为成员函数重载,而这里的+是作为非成员函数重载的

B.两个int 型参数的和应该是int 型,而这里将+的返回类型声明为double

C.没有将运算符重载函数声明为某个类的友元

D.C++已经提供了求两个int 型数据之和运算符+,不能再定义同样的运算符


正确答案:B

第4题:

已知:double A(double A) {return++a;}和int A(in A) {return++a;}是一个函数模板的两个实例,则该函数模板定义为【 】


正确答案:templatetypename T> TA(TA) {return a++)
templatetypename T> TA(TA) {return a++,) 解析:本题考核函数模板的定义。通过两个实例知道该例中只有一种数据类型,所以在定义模板时只需定义一个模板参数T。

第5题:

intFunc(int,int);不可与下列哪个函数构成重载()

A、intFunc(int,int,int);

B、doubleFunc(int,int);

C、doubleFunc(double,double);

D、doubleFunc(int,double);


参考答案:B

第6题:

若类A和类B的定义如下:includeclass A{int i,j;public:int geti(){return i;}};class

若类A和类B的定义如下: #include<malloc.h> class A { int i,j; public: int geti() { return i; } }; class B:public A { int k; public: void make() { k=i*j; } }; 则上述定义中非法的表达式是( )。

A.k=i*j

B.int k;

C.return i;

D.void make();


正确答案:A
解析:因为派生类不能是基类的私有成员i和j(默认情况下,成员的属性为私有),所以表达式k=i*j是非法的。其余的访问权限都是许可的。

第7题:

若类A和类B的定义如下

class A

{

int i,j;

public:

int geti( )

{

return i;

}

};

class B:public A

{

int k:

public:

void make( )

{

k=i*j;

}

};

则上述定义中非法的语句是

A.k=i*j

B.int k;

C.return i;

D.void make()


正确答案:A
解析:本题考核派生类的定义和访问权限。变量i和j都是基类A的私有变量,它们是隐蔽的,在派生类中不能直接访问。

第8题:

已知:double A(double A){return++a;}和int A(int a){return ++a;)是一个函数模板的两个实例,则该函数模板定义为【 】。


正确答案:templatetypename T> TA(T a){retum a++;)
templatetypename T> TA(T a){retum a++;)

第9题:

下列程序的输出是3,请填充程序中的空缺,使该行形成一个运算符重载函数的定义。

include<iostream>

using namespace std;

class MyNumber{

Int n;

public:

MyNumber(int k):n(k){}

【 】 int()const{return n;}

};

int main(){

MyNumber numl(3);

cout<<int(numl);

return 0;

}


正确答案:operator
operator

第10题:

有如下的运算符重载函数定义:double operator+(int i,int k){return double(i+k);}但定义有错误,对这个错误最准确的描述是( )。

A.#NAME?

B.两个int型参数的和也应该是int型,而这里将+的返回类型声明为double

C.没有将运算符重载函数声明为某个类的友元

D.C++已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符


正确答案:D
解析:此题考查的是运算符的重载。c++语言规定,不能作为非成员函数重载的运算符有=、[]、()、->以及所有的类型转换运算符,故选项A)错误;运算符重载对返回值类型没有限制,故选项B)错误;C++并不强制要求非成员重载的运算符一定是某个类的友元,所以选项C)错误:题目中重载的“+”运算符的两个参数都是int类型,而C++已经提供了求两个血型数据之和的运算符+,编译器无法区分应该调用哪一个,所以应该选择选项D)。

更多相关问题