C++试题.docx
《C++试题.docx》由会员分享,可在线阅读,更多相关《C++试题.docx(9页珍藏版)》请在冰豆网上搜索。
![C++试题.docx](https://file1.bdocx.com/fileroot1/2023-1/7/171119e7-4f8d-4ed5-b816-f19f52f3598a/171119e7-4f8d-4ed5-b816-f19f52f3598a1.gif)
C++试题
一、选择填空
1.对定义重载函数的下列要求中,()是错的。
GG.要求参数的个数不同;
HH.要求参数中至少有一个类型不同;
II.要求参数个数相同时,参数类型不同;
JJ.要求函数的返回值不同。
2.下列函数中,()不能重载。
KK.成员函数;
LL.非成员函数;
MM.析构函数;
NN.构造函数。
3.下列对重载函数的描述中,()是错的。
OO.重载函数中不允许使用缺省参数;
PP.重载函数中编译系统会根据参数表进行选择;
QQ.不要使用重载函数来描述毫无相干的函数;
RR.构造函数重载将会给初始化带来多种方式;
4.下列运算符中,()运算符不能重载。
SS.&&;B.[];C.:
:
;D.new
5.下列关于运算符重载的描述中,()是正确的。
TT.运算符重载可以改变操作数的个数;
UU.运算符重载可以改变优先级;
VV.运算符重载可以改变结合性;
WW.运算符重载不可以改变语法结构。
6.运算符重载函数是()。
XX.成员函数;
YY.友元函数;
ZZ.内联函数;
AAA.带缺省参数的函数。
7.关于动态联编的下列描述中,()是错误的。
BBB.动态联编是以虚函数为基础的;
CCC.动态联编是在运行时确定所调用的函数代码的;
DDD.动态联编调用函数操作是指向对象的指针或对象引用;
EEE.动态联编是在编译时确定操作函数的;
8.关于虚函数的描述中,()是正确的。
FFF.虚函数是一个static类型的成员函数;
GGG.虚函数是一个非成员函数;
HHH.基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数;
III.派生类的虚函数与基类的虚函数具有不同的参数个数和类型。
9.关于纯虚函数和抽象类的描述中,()是错误的。
JJJ.纯虚函数是一种特殊的虚函数,它没有具体的实现;
KKK.抽象类是指具有纯虚函数的类;
LLL.一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类;
MMM.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出;
10.下列描述中,()是抽象类的特性。
NNN.可以说明虚函数;
OOO.可以进行构造函数重载;
PPP.可以定义友元函数;
QQQ.不能说明其对象。
二、判断下列描述的正确性,对者划√,错者划×。
1.函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。
√
2.重载函数可以带有缺省值参数,但是要注意二义性。
√
3.多数运算符可以重载,个别运算符不能重载,运算符重载是通过函数定义实现的。
√
4.对每个可重载的运算符来讲,它既可以重载为友元函数,又可以重载为成员函数,还可以重载为非成员函数。
。
×
5.对单目运算符重载为友元函数时,说明一个形参;重载为成员函数时,不能显式说明形参。
√
6.重载运算符保持原运算符的优先级和结合性不变。
√
7.虚函数是用virtual关键字说明的成员函数。
√
8.构造函数说明为纯虚函数是没有意义的。
√
9.抽象类是指一些没有说明对象的类。
×
10.动态联编是在运行时选定调用的成员函数的。
√
三、分析下列程序的输出结果。
1、
#include
classB
{
public:
B(inti){b=i+50;show();}
B(){}
virtualvoidshow(){cout<<”B:
:
show()called.”<
protected:
intb;
};
classD:
publicB
{
public:
D(inti):
B(i){d=i+100;show();}
D(){}
voidshow(){cout<<”D:
:
show()called.”<protected:
intd;
};
voidmain()
{
Dd1(108);
}
2、
#include
classB
{
public:
B(){}
B(inti){b=i;}
virtualvoidvirfun(){cout<<”B:
:
virfun()called.\n”;}
private:
intb;
};
classD:
publicB
{
public:
D(){}
D(inti,intj):
B(i){d=j;}
private:
intd;
voidvirfun(){cout<<”D:
:
virfun()called.\n”;}
};
voidfun(B*obj)
{obj->virfun();}
voidmain()
{
D*pd=newD;
fun(pd);
}
3、
#include
classA
{
public:
A(){ver=’A’;}
voidprint(){cout<<”TheAversion”<protected:
charver;
};
classD1:
publicA
{
public:
D1(intnumber){info=number;ver=’1’;}
voidprint()
{cout<<”TheD1info:
”<private:
intinfo;
};
classD2:
publicA
{
public:
D2(intnumber){info=number;}
voidprint()
{cout<<”TheD2info”<private:
intinfo;
};
classD3:
publicD1
{
public:
D3(intnumber):
D1(number)
{info=number;ver=’3’;}
voidprint()
{cout<<”TheD3info”<private:
intinfo;
};
voidprint_info(A*p)
{p->print();}
voidmain()
{
Aa;
D1d1(4);
D2d2(100);
D3d3(-25);
print_info(&a);
print_info(&d1);
print_info(&d2);
print_info(&d3);
}
4、
#include
classA
{
public:
A(){ver=’A’;}
virtualvoidprint(){cout<<”TheAversion”<protected:
charver;
};
classD1:
publicA
{
public:
D1(intnumber)
{
info=number;ver=’1’;
}
voidprint()
{
cout<<”TheD1info:
”<}
private:
intinfo;
};
classD2:
publicA
{
public:
D2(intnumber){info=number;}
voidprint()
{
cout<<”TheD2info:
”<}
private:
intinfo;
};
classD3:
publicD1
{
public:
D3(intnumber):
D1(number)
{info=number;ver=’3’;}
voidprint()
{
cout<<”TheD3info:
”<}
private:
intinfo;
};
voidprint_info(A*p)
{p->print();}
voidmain()
{
Aa;
D1d1(4);
D2d2(100);
D3d3(-25);
print_info(&a);
print_info(&d1);
print_info(&d2);
print_info(&d3);
}
5、
#include
classMatrix
{
public:
Matrix(intr,intc){row=r;col=c;elem=newdouble[row*col];}
double&operator()(intx,inty){returnelem[col*(x-1)+y-1];}
doubleoperator()(intx,inty)const{returnelem[col*(x-1)+y-1];}
~Matrix(){delete[]elem;}
private:
double*elem;
introw,col;
};
voidmain()
{
Matrixm(5,8);
for(inti=0;i<5;i++)
m(i,1)=i+5;
for(i=0;i<5;i++)
cout<cout<}