C++面向对象程序设计模拟试题二.docx
《C++面向对象程序设计模拟试题二.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计模拟试题二.docx(19页珍藏版)》请在冰豆网上搜索。
![C++面向对象程序设计模拟试题二.docx](https://file1.bdocx.com/fileroot1/2023-5/22/6f95a52a-f4f1-4f64-9b88-9cde8cfc7724/6f95a52a-f4f1-4f64-9b88-9cde8cfc77241.gif)
C++面向对象程序设计模拟试题二
C++面向对象程序设计模拟试题二
一、单项选择题
1.说明内联函数的关键字是(A)。
A.inlineB.virtualC.defineD.static
2.假定CAb为一个类,则执行CAboX;语句时将自动调用该类的(B)
A.有参构造函数B.无参构造函数C.拷贝构造函数D.赋值重载函数
3.cin是某个类的标准对象的引用,该类是(B)。
A.ostreamB.istreamC.stdoutD.stdin
4.下面的哪个保留字不能作为函数的返回类型?
(C)A.voidB.intC.newD.lon
5.不能参与重载的运算符是(A)A.类B.函数C.函数模板D.运算符
6.由于数据隐藏的需要,静态数据成员通常被说明为(A)。
A.私有的B.公有的C.保护的D.不可访问的
7.编译时多态性使用什么获得?
(A)A.重载函数B.继承C.虚函数D.B和C
8.拷贝构造函数的参数通常是(C)。
A.无特殊要求B.指向对象的指针C.自已类对象的常引用D.对象
9.C++有几种联编?
(B)A.1种B.2种C.3种D.4种
10.基类和派生类可以分别称为(B)。
A.“大类”和“小类”B.“父类”和“子类”C.“小类”和“大类”D.“子类”和“父类”
二、判断
1.不可以定义抽象类的对象。
Y()
2.内联函数的定义必须出现在第一次调用内联函数之前。
Y()
3.模板函数与函数模板的意义完全相同。
N()
4.只有常成员函数才可以操作常对象。
Y()
5.引用可以不初始化。
N()
6.使用new运算符创建数组时,可以为该数组指定初始值。
N()
三、填空题(本大题共6小题,每小题2分,共12分)不写解答过程,将正确的答案写在每小题的空格内。
错填或不填均无分。
1.设函数max是由函数模板实现的,并且max(3.5,5)和max(3,5)都是正确的函数调用,则此函数模板具有
(2)个类型参数。
2.在C++中,函数重载与虚函数帮助实现了类的(多态)性。
3.由static修饰的数据成员为该类的所有对象(共享)。
4.重载函数在参数类型或参数个数上不同,但(函数名)相同。
5.使用new建立的动态对象在不用时必须用(delete)释放所占用的空间。
6.重载运算符“<<”的函数名为(operator<<)。
四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。
1.阅读下面程序,写出输出结果。
#include
usingnamespacestd;
classCPosition
{
public:
CPosition(intiPositionX=0,intiPositionY=0):
m_iPositionX(iPositionX)
{
m_iPositionY=iPositionY;
}
intGetPositionX()const
{
returnm_iPositionX;
}
intGetPositionY()const
{
returnm_iPositionY;
}
voidSetPositionX(intiPositionX)
{
m_iPositionX=iPositionX;
}
voidSetPositionY(intiPositionY)
{
m_iPositionY=iPositionY;
}
private:
intm_iPositionX;//X坐标
intm_iPositionY;//X坐标
};
intmain(void)
{
CPositionoPostion1;
constCPositionoPostion2(6,8);
cout<oPostion1.SetPositionX(16);
cout<oPostion1.SetPositionY(18);
cout<cout<cout<return0;
}
上面程序的输出结果为:
1.参考答案:
0
16
18
6
8
2.阅读下面程序,写出输出结果。
#include
usingnamespacestd;
template
classCTest
{
public:
CTest(Typem_tArray[],intiSize):
m_pArray(m_tArray)
{
m_iSize=iSize;
}
voidPrint()const
{
for(inti=0;i{
cout<}
}
private:
Type*m_pArray;
intm_iSize;
};
intmain(void)
{
inta[]={1,0,8};
doubleb[]={1.6,1.8};
CTestoTest1(a,3);
oTest1.Print();
CTestoTest2(b,sizeof(b)/sizeof(double));
oTest2.Print();
cout<return0;
}
上面程序的输出结果为:
2.参考答案:
1081.61.8
3.阅读下面程序,写出输出结果。
#include
usingnamespacestd;
classCGoods
{
public:
CGoods(intiWeight)
{
m_iWeight=iWeight;
m_iTotalWeight=m_iTotalWeight+iWeight;
}
CGoods(constCGoods&oGood)
{
m_iWeight=oGood.m_iWeight;
m_iTotalWeight=m_iTotalWeight+m_iWeight;
}
~CGoods()
{
m_iTotalWeight=m_iTotalWeight-m_iWeight;
}
voidPrint()const;
staticintGetTotalWeight()
{
returnm_iTotalWeight;
}
private:
intm_iWeight;
staticintm_iTotalWeight;
};
intCGoods:
:
m_iTotalWeight=8;//初始化静态数据成员
voidCGoods:
:
Print()const
{
cout<m_iWeight<<""<m_iTotalWeight<<"";
}
intmain(void)
{
CGoodsoGood1(6);
oGood1.Print();
CGoodsoGood2(oGood1);
oGood2.Print();
cout<:
GetTotalWeight();
cout<return0;
}
上面程序的输出结果为:
3.参考答案:
61462020
4.阅读下面程序,写出输出结果。
#include
usingnamespacestd;
template
classCTest
{
public:
CTest(TypetA=0,TypetB=0,TypetC=0):
m_tC(tC)
{
m_tA=tA;
m_tB=tB;
}
voidPrint()
{
cout<cout<}
voidPrint()const
{
cout<}
private:
Typem_tA,m_tB;
constTypem_tC;
};
intmain(void)
{
CTestoTest1;
oTest1.Print();
CTestoTest2(1,9,6);
oTest2.Print();
constCTestoTest3(0,6,1.8);
oTest3.Print();
cout<return0;
}
上面程序的输出结果为:
4.参考答案:
0
0
1
9
1.8
五、程序改错题
1.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。
#include//1
usingnamespacestd;//2
//3
classCArray//4
{//5
public:
//6
voidCArray(intiArray[],intiSize):
m_pArray(iArray),m_iSize(iSize)//7
{//8
}//9
//10
intGetSize()//11
{//12
returnm_iSize;//13
}//14
//16
int&operator[](intiIndex)//17
{//18
returnm_pArray[iIndex-1];//19
}//20
//21
private:
//22
int*m_pArray;//指向一个数组空间//23
intm_iSize;//数组元素个数//24
};//25
//26
//27
intmain(void)//28
{//29
ints[]={3,7,2,1,5};//30
CArrayoArray(s,5);//31
oArray[1]=9;//32
for(inti=1;i<=5;i++)//33
{//34
cout<}//36
cout<//38
return0;//39
}//40
1.参考答案:
出错行:
第7行
原因:
构造函数不能有返回值类型
改正:
去掉void
2.下面程序中有错误,请指出出错的行,说明错误原因,并加以改正。
#include//1
usingnamespacestd;//2
//3
classCTest//4
{//5
public:
//6
CTest(intiA=0,intiB=0):
m_iA(iA),m_iB(iB)//7
{//8
}//9
//10
voidPrint()//11
{//12
cout<}//14
//15
private:
//16
intm_iA,m_iB;//17
};//18
//19
//20
intmain(void)//21
{//22
constCTestoTest(12,16);//23
oTest.Print();//24
cout<//26
return0;//27
}//28
2.参考答案:
出错行:
第11、23行
原因:
常对象只能调用常成员函数
改正:
将第11行改为:
voidPrint()const//11
或
将第23行改为:
CTestoTest(12,16);//23
3.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。
#include//1
usingnamespacestd;//2
//3
classCInteger//4
{//5
public:
//6
CInteger(intiNum=0)//7
{//8
m_iNum=iNum;//9
}//10
//11
intoperatorint()//12
{//13
returnm_iNum;//14
}//15
//16
voidPrint()const//17
{//18
cout<}//20
//21
private:
//22
intm_iNum;//23
};//24
//25
intmain(void)//26
{//27
CIntegeroCInteger(168);//28
intiNum;//29
iNum=oCInteger;//30
cout<//32
return0;//33
}//34
3.参考答案:
出错行:
第12行
原因:
类型转换函数没有返回值类型
改正:
去掉返回值类型int
4.下面程序中有一处错误,请指出出错的行,说明错误原因,并加以改正。
#include//1
usingnamespacestd;//2
//3
classCBase//4
{//5
public:
//6
CBase(intiBase=0):
m_iBase(iBase)//7
{//8
}//10
//11
virtualvoidShow()const=0;//12
//13
intGet()const//14
{//15
returnm_iBase;//16
}//17
//18
private:
//19
intm_iBase;//20
};//21
//22
classCDerive:
publicCBase//23
{//24
public:
//25
CDerive(intiBase=0,intiDerive=0):
CBase(iBase)//26
{//27
m_iDerive=iDerive;//28
}//29
//30
voidShow()const//31
{//32
cout<:
Get()<<","<}//34
//35
private:
//36
intm_iDerive;//37
};//38
//39
voidPrint(constCBaseobj)//40
{//41
obj.Show();//42
}//43
//44
intmain(void)//45
{//46
CDeriveobj(10);//47
Print(obj);//48
return0;//49
}//50
4.参考答案:
出错行:
第40行
原因:
抽象类不能用来直接作函数参数,但可使用抽象类的引用作参数。
改正:
将第40行改为:
voidPrint(constCBase&obj)//40
六、编程题(本大题共2个小题,每小题8分,共16分)
1.编写一个函数模板,用于求数组中各元素之和,并编写测试程序进行测试。
函数模板声明如下:
template
TypeSum(TypetArray[],intiSize)
参考程序:
#include
usingnamespacestd;
template
TypeSum(TypetArray[],intiSize)
{
TypetSum=0;
for(inti=0;i{
tSum=tSum+tArray[i];
}
returntSum;
}
intmain(void)
{
inta[]={1,2,3};
doubleb[]={1.5,2.8,8.9,8};
cout<cout