面向对象程序设计期末复习题与答案1.docx
《面向对象程序设计期末复习题与答案1.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计期末复习题与答案1.docx(16页珍藏版)》请在冰豆网上搜索。
面向对象程序设计期末复习题与答案1
C++面向对象程序设计复习
试题类型1、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。
15题,每小题2分,共30分)[主要从作业题目中抽出来]
2.填空题。
(10题,每小题3分,共30分)
3、阅读程序,写出程序运行结果。
【也称计算题】(3题,每小题5分,共15分)
4、程序编制题【也称综合分析题】。
(第1、2题每题8分,第3题9分,共25分)重点复习内容
打*号是重点,打▲号是编程题出题范围
*基本概念,对象,消息,类。
面向对象系统特性,封装性,继承性,多态性。
*▲C++类的构成,类与对象,构造与析构,动态存储,类嵌套。
静态成员,对象数组,友元。
*函数重载。
运算符重载。
*引用定义与引用参数
*基类与派生类的定义。
*基类及派生类的访问权(含派生类对基类的访问、通过派生类对象对基类的访问)和初始化。
多继承与虚基类。
*多态性与虚函数。
纯虚函数、抽象类。
*▲函数模板。
*▲使用类来定义对象并在程序中的应用题型样题
填空题1.假定AB为一个类,则执行“ABa[10];”语句时,系统自动调用该类的构造函数的次数为_________。
答案:
10
2.可以用p.a的形式访问派生类对象P的基类成员a,其中a是_________。
答案:
公有继承的公有成员
3.能作为重载函数的调用的依据是_________。
答案:
参数个数、参数类型
4.在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流是否结束状态的操作函数名称是_________
答案:
eof
5.函数重载是指_________。
答案:
两个或两个以上的函数取相同的函数名,但形参的个数或类型不同
6.在派生类中重新定义虚函数时必须在_________方面与基类保持一致。
答案:
参数个数
阅读程序例题【计算题】
1.分析以下程序的执行结果
#include
classSample
{
intx,y;
public:
Sample(){x=y=0;}
Sample(inta,intb){x=a;y=b;}
~Sample()
{
if(x==y)
cout<<“x=y”<else
cout<<“x!
=y”<}
voiddisp()
{
cout<<“x=”<}
};
voidmain()
{
Samples1,s2(2,3);
s1.disp();
s2.disp();
}
解:
x=0,y=0
x=2,y=3
x!
=y
x=y
2.分析以下程序的执行结果
#include
intadd(intx,inty)
{
returnx+y;
}
intadd(intx,inty,intz)
{
returnx+y+z;
}
voidmain()
{
inta=4,b=6,c=10;
cout<}
解:
10,203.分析以下程序执行结果
#include
intadd(intx,inty)
{
returnx+y;
}
doubleadd(doublex,doubley)
{
returnx+y;
}
voidmain()
{
inta=4,b=6;
doublec=2.6,d=7.4;
cout<}
解:
10,10
4.分析以下程序执行的结果
#include
classSample
{
intx,y;
public:
Sample(){x=y=0;}
Sample(inta,intb){x=a;y=b;}
voiddisp()
{
cout<<"x="<}
};
voidmain()
{
Samples1,s2(1,2),s3(10,20);
Sample*pa[3]={&s1,&s2,&s3};
for(inti=0;i<3;i++)
pa[i]->disp();
}
解:
x=0,y=0
x=1,y=2
x=10,y=205.分析以下程序的执行结果:
#include
classbase
{
intn;
public:
base(){};
base(inta)
{
cout<<"constructingbaseclass"<n=a;
cout<<"n="<}
~base(){cout<<"destructingbaseclass"<};
classsubs:
publicbase
{
intm;
public:
subs(inta,intb):
base(a)
{
cout<<"constructingsubclass"<m=b;
cout<<"m="<}
~subs(){cout<<"destructingsubclass"<};
voidmain()
{
subss(1,2);
}
解:
constructingbaseclass
n=1
constructingsubclass
m=2
destructingsubclass
destructingbaseclass
6.分析以下程序的执行结果:
#include
classSample
{
protected:
intx;
public:
Sample(){x=0;}
Sample(intval){x=val;}
voidoperator++(){x++;}
};
classDerived:
publicSample
{
inty;
public:
Derived():
Sample(){y=0;}
Derived(intval1,intval2):
Sample(val1){y=val2;}
voidoperator--(){x--;y--;}
voiddisp()
{
cout<<"x="<}
};
voidmain()
{
Derivedd(3,5);
d.disp();
d++;
d.disp();
d--;
d--;
d.disp();
}
解:
x=3,y=5
x=4,y=5
x=2,y=3
7分析以下程序执行结果:
#include
classA
{
public:
A(char*s){cout<
~A(){}
};
classB:
publicA
{
public:
B(char*sl,char*s2):
A(sl)
{
cout<}
};
classC:
publicA
{
public:
C(char*sl,char*s2):
A(sl)
{
cout<}
};
classD:
publicB,publicC
{
public:
D(char*sl,char*s2,char*s3,char*s4):
B(sl,s2),C(sl,s3)
{
cout<}
};
voidmain()
{
Dd("classA","classB","classC","classD");
}
解:
classA
classB
classA
classC
classD补充例题
1.分析以下程序的执行结果
#include
template
Tmax(Tx,Ty)
{return(x>y?
x:
y);}
voidmain()
{cout<解答:
5,3.52.分析以下程序的执行结果
#include
voidmain()
{
inta[]={10,20,30,40},*pa=a;
int*&pb=pa;
pb++;
cout<<*pa<}
解答:
输出为:
203.分析以下程序的执行结果
#include
template
Tabs(Tx)
{return(x>0?
x:
-x);}
voidmain()
{cout<解答:
输出为:
3,2.6
4.分析以下程序的执行结果
#include
classSample
{
charc1,c2;
public:
Sample(chara){c2=(c1=a)-32;}
voiddisp()
{cout<};
voidmain()
{
Samplea('a'),b('b');
a.disp();
b.disp();
}
解答:
a转换为A
b转换为B5.分析以下程序的执行结果
#include
voidmain()
{
inta;
int&b=a;//变量引用
b=10;
cout<<“a=”<}
解答:
输出为:
a=106.分析以下程序的执行结果
#include
classSample
{
intx;
public:
Sample(){};
Sample(inta){x=a;}
Sample(Sample&a){x=a.x+++10;}
voiddisp(){cout<<“x=”<};
voidmain()
{Samples1
(2),s2(s1);
s1.disp();
s2.disp();
}
解答:
x=3//++运算的结果
x