C++面向对象程序设计模拟试题一Word文件下载.docx
《C++面向对象程序设计模拟试题一Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计模拟试题一Word文件下载.docx(18页珍藏版)》请在冰点文库上搜索。
2.抽象类可以用来直接创建对象。
()
3.内联函数中可以出现递归语句。
4.模板类与类模板的意义完全相同。
()
5.常对象只能调用常成员函数。
6.重载函数要求函数有相同的函数名,但具有不同的参数序列。
三、填空题(本大题共6小题,每小题2分,共12分)不写解答过程,将正确的答案写在每小题的空格内。
错填或不填均无分。
1.在用C++进行程序设计时,最好用()代替malloc。
2.函数模板中紧随template之后尖括号内的类型参数都要寇以保留字()。
3.编译时多态性可以用()函数实现。
4.拷贝构造函数用它所在类的()作为参数。
5.用关键字static修饰的类的成员称为()成员。
6.重载运算符“+”的函数名为()。
四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。
1.阅读下面程序,写出输出结果。
#include<
iostream>
usingnamespacestd;
classCArray
{
public:
CArray(intiArray[],intiSize):
m_pArray(iArray),m_iSize(iSize)
{
}
intGetSize()
returnm_iSize;
int&
operator[](intiIndex)
returnm_pArray[iIndex-1];
private:
int*m_pArray;
//指向一个数组空间
intm_iSize;
//数组元素个数
};
intmain()
ints[]={3,7,2,1,5};
CArrayoArray(s,5);
oArray[1]=9;
for(inti=1;
i<
=5;
i++)
cout<
<
oArray[i]<
"
;
cout<
endl;
return0;
}
上面程序的输出结果为:
2.阅读下面程序,写出输出结果。
template<
classType>
voidPrint(Typea[],intn)
for(inti=0;
n;
a[i]<
inta[]={5,6,8};
doubleb[]={6.8,9.6};
Print(a,sizeof(a)/sizeof(int));
Print(b,2);
3.阅读下面程序,写出输出结果。
classCTest
CTest(intiVar):
m_iVar(iVar)
m_iCount++;
~CTest()
voidPrint()const;
staticintGetCount()
returnm_iCount;
intm_iVar;
staticintm_iCount;
intCTest:
m_iCount=0;
voidCTest:
Print()const
this->
m_iVar<
<
m_iCount<
CTestoTest1(6);
oTest1.Print();
CTestoTest2(8);
oTest2.Print();
CTest:
GetCount();
4.阅读下面程序,写出输出结果。
CTest(intiX=0,intiY=0,intiZ=0):
m_iZ(iZ)
m_iX=iX;
m_iY=iY;
voidPrint()
m_iX<
m_iY<
voidPrint()const
m_iZ<
intm_iX,m_iY;
constintm_iZ;
CTestoTest1;
CTestoTest2(1,6,8);
constCTestoTest3(6,0,18);
oTest3.Print();
五、程序改错题(本大题共4小题,每小题5分,共20分)指出下面程序中的错误,说明错误原因,并加以改正。
1.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。
//1
//2
//3
classCTest//4
{//5
//6
CTest(intiVar=0):
m_iArr(iVar)//7
{//8
构造函数:
"
m_iArr<
//9
}//10
//11
void~CTest()//12
{//13
析造函数:
//14
}//15
//16
//17
intm_iArr;
//18
//19
//20
//21
intmain()//22
{//23
CTestoTest1,oTest2(8);
//24
//25
//26
//27
}//28
2.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。
CTest(intiA=0,intiB):
m_iA(iA),m_iB(iB)//7
}//9
//10
voidShow()//11
{//12
m_iA<
"
m_iB<
//13
}//14
//15
//16
intm_iA,m_iB;
//17
//18
//19
//20
intmain()//21
{//22
CTestoTest(12,16);
//23
oTest.Show();
//24
3.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。
CTest(intiVar=0)//7
m_iVar=iVar//9
voidPrint()const//12
m_iVar<
//14
constintm_iVar;
//18
constCTestoTest(16);
oTest.Print();
//26
//27
//28
}//29
4.下面程序中有一处错误,请指出出错的行,说明错误原因,并加以改正。
classCBase//4
CBase(intiBase=0):
m_iBase(iBase)//7
virtualvoidShow()=0;
//12
//13
intGet()const//14
{//15
returnm_iBase;
//16
}//17
//19
intm_iBase;
//20
//22
classCDerive:
publicCBase//23
{//24
//25
CDerive(intiBase=0,intiDerive=0):
CBase(iBase)//26
{//27
m_iDerive=iDerive;
//28
}//29
//30
voidShow()//31
{//32
CBase:
Get()<
m_iDerive<
//33
}//34
//35
//36
intm_iDerive;
//37
//38
//39
intmain()//40
{//41
CBaseobj(10);
//42
obj.Show();
//43
//44
}//45
六、编程题(本大题共2个小题,每小题8分,共16分)
1.编写一个函数模板,用于求参数的绝对值,并编写测试程序进行测试。
函数模板声明如下:
TypeAbs(TypetVar)
2.定义一个复数类CComplex,定义带有2个参数(其中一个为缺省参数)的构造函数,显示复数值的函数Show(),重载“+”运算符(用成员函数实现),并编写测试程序进行测试。
C++面向对象程序设计模拟试题一参考答案
1.B2.A3.A4.C5.C
6.D7.D8.D9.A10.A
1.参考答案:
√
2.参考答案:
×
3.参考答案:
4.参考答案:
5.参考答案:
6.参考答案:
new
class或typename
重载
对象
静态
operator+
97215
5686.89.6
61822
1
6
18
出错行:
第12行
原因:
析造函数不能有返回值类型
改正:
去掉void
第7行
带缺省值的参数应放在参数表的尾部,其后不允许出现不带缺省值的参数
CTest(intiA=0,intiB=0):
或
CTest(intiA,intiB=0):
CTest(intiA,intiB):
m_iA(iA),m_iB(iB)//7
第9行
常数据成员只能通过初始化表方式进行初始化。
去掉第9行,在第7行后加初始化表,即第9行改为:
m_iVar(iVar)//7
第42行
抽象类不能用来直接创建对象。
将第42行改为:
CDeriveobj(10);
1.参考程序:
if(tVar>
=0)returntVar;
elsereturn-tVar;
Abs(5)<
Abs(-5)<
Abs(2.5)<
Abs(-2.5)<
2.参考程序:
classCComplex
CComplex(doubledReal,doubledImage=0)
m_dReal=dReal;
m_dImage=dImage;
voidShow()
m_dReal;
if(m_dImage>
0)
{
cout<
+"
m_dImage<
i"
}
elseif(m_dImage<
-"
-m_dImage<
CComplexoperator+(constCComplex&
obj)
CComplexobjTemp(m_dReal+obj.m_dReal,m_dImage+obj.m_dImage);
returnobjTemp;
doublem_dReal,m_dImage;
CComplexobj1(2,6),obj2(3,8),obj3(0);
obj1.Show();
obj2.Show();
obj3.Show();
obj3=obj1+obj2;