面向对象程序设计复习题Word下载.docx
- 文档编号:17227881
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:19
- 大小:28.55KB
面向对象程序设计复习题Word下载.docx
《面向对象程序设计复习题Word下载.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计复习题Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
C.动态创建的对象可以用delete运算将其释放。
D.动态创建对象生命期不受块和函数作用域的限制。
6.当一个类的某个函数被说明为虚函数时,该函数在该类的所有派生类中______。
A.都不是虚函数。
B.都是虚函数。
C.必须重新说明后才是虚函数。
D.必须加上virtual,同时重新说明后才是虚函数。
7.主函数如下。
则正确的求3个数中最小的数的函数模板MIn定义是______。
voidmain(){
cout<
<
Min(10,3,5)<
endl;
cout<
Min(3.4,5.6,10.0)<
Min('
b'
'
a'
c'
)<
}
A.template<
typenameT1,typenameT2>
T2Min(T1a,T1b,T1c){T2t=a<
b?
a:
b;
returnt<
c?
t:
c;
};
B.template<
typenameT>
TMin(Ta,Tb,Tc){Tt=a<
C.template<
TMin(Ta,Tb,Tc){intt=a<
D.template<
Min(Ta,Tb,Tc){Tt=a>
returnt>
8.下列关于纯虚函数和抽象类的描述中错误的是______。
A.纯虚函数没有具体的实现。
B.抽象类的派生类一定是非抽象类。
C.抽象类只能作为基类使用,不能实例化。
D.包含有纯虚函数的类称为抽象类。
9.下列关于异常处理的描述错误的是______。
A.throw语句必须在try语句块中直接运行或通过调用函数运行。
B.throw语句抛出的异常可以不被捕获。
C.一个程序中可以有try语句,而没有throw语句。
D.一个程序中可以有try语句,而没有catch语句。
10.下列关于流的叙述中______是错误的。
A.cin是输入流,可以用其输入字母、数字、回车等各种键盘符号。
B.使用文件流对象时,要使用#include<
fstream>
编译预处理语句。
C.C++将每个文件看成是一个有序的字节流。
D.无论是文本文件还是二进制文件都有读写指针。
三、概念填空题(每空1分,共10分)
在C++中“流”是表示数据从一个对象到另一个对象的传送。
从流中取得数据称为1,用符号2表示;
向流中添加数据称为3,用符号4表示。
使用文件进行输入/输出时,系统需要读入数据时是从5文件读入,即6操作。
而系统要写数据时,是写到7文件中,即8操作。
通常标准输入设备指9。
标准输出设备指10。
四、程序填空题(每空2分,共30分)
1.CData为日期类。
CData类重载了+、-运算符,实现CData对象加减天数;
重载插入运算符<
为友元函数,以”年-月-日”形式输入日期。
#include<
iostream>
usingnamespacestd;
classData{intyear,month,day;
boolIsLeapYear(inty){//判断年份是否为闰年
return(year%400==0||1);
}
2intdays[2][12];
public:
Data(inty=0,intm=0,intd=0){year=y;
month=m,day=d;
Dataoperator+(int);
Dataoperator-(int);
3ostream&
operator<
(ostream&
Data&
);
};
DataData:
operator+(intd){//+运算符重载,d表示要加的天数
Datadt=*this;
intleap=IsLeapYear(dt.year);
d+=dt.day;
while(d>
days[leap][dt.month-1]){
d-=days[leap][dt.month-1];
if(++dt.month==13){
dt.year++;
dt.month=4;
leap=IsLeapYear(5);
}
dt.day=d;
returndt;
operator-(intd){//-运算符重载,d表示要减的天数
intleap=6(dt.year);
d=dt.day-d;
while(d<
1){
if(7dt.month==0){
dt.year8;
dt.month=12;
leap=IsLeapYear(dt.year);
d9days[leap][dt.month-1];
ostream&
out,Data&
dt){
out<
dt.year<
"
-"
dt.month<
dt.day<
10;
intData:
days[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
2.写出下面程序运行的结果。
classCAT{
CAT();
CAT(CAT&
~CAT();
intGetAge(){return*itsAge;
voidSetAge(intage){*itsAge=age;
protected:
int*itsAge;
};
CAT:
CAT(){
itsAge=newint;
*itsAge=5;
cat){
*itsAge=*(cat.itsAge);
~CAT(){
deleteitsAge;
itsAge=NULL;
CATa;
age="
a.GetAge()<
a.SetAge(6);
CATb(a);
b.GetAge()<
a.SetAge(7);
}1112131415
五、简答题(每题5分,共10分)
1.用最简练的语言解释下列词汇在面向对象程序设计中的含义:
对象,类,方法,接口,消息,封装,继承,服务
2.简要回答下列问题:
(1)什么是多态性?
什么是重载?
编译系统是如何实现重载的?
(2)什么是函数重载?
编译系统如何区分同名函数的不同版本?
(3)若基类中定义了成员函数f1(),其公有派生类中是否一定要重定义f1()?
派生类重定义的基类成员函数是否由参数区分?
(4)为什么友元运算符重载不能使用缺省参数?
六、程序设计题(每题15分,共30分)
1.声明基类abstract,有成员函数fn1()和fn2(),fn1()是虚函数。
从abstract公有派生entity类。
entity类也有同名成员函数fn1()和fn2()。
在主函数中声明一个entity的对象和声明abstract类和entity类的指针,两个指针都指向entity的对象,并通过这两个指针分别调用fn1()
和fn2()函数。
abstract类的fn1()函数定义virtualvoidfn1(){cout<
”abstractfn1()”<
abstract类的fn2()函数定义voidfn2(){cout<
”abstractfn2()”<
entity类的fn1()函数定义voidfn1(){cout<
”entityfn1()”<
entity类的fn2()函数定义voidfn2(){cout<
”entityfn2()”<
完成如下设计:
①基类abstract的定义;
②派生类entity的定义;
③主程序的定义及程序运行结果。
2.自定义字符串类CString如下。
classCString{
CString(constchar*str=NULL)//构造函数
CString(constCString&
other)//复制构造函数
~CString()//析构函数
booloperator<
(constCString&
other)//<
运算符重载函数
private:
char*m_data//字符指针,指向动态申请的内存,该内存存放字符串。
CString:
CString(constchar*str){//构造函数
if(str==NULL){
m_data=newchar[1];
*m_data=0;
else{
m_data=newchar[strlen(str)+1];
strcpy(m_data,str);
}}
设计如下函数:
①CString(constCString&
other)复制构造函数;
②~CString()析构函数;
③booloperator<
other)运算符重载函数。
“<
”的含义为按ASCII码比较*m_data的大小。
复习题
(二)
一、判断题(每题1分,共10分)
1.类是对象的抽象。
2.类的析构函数无类型、无参数,不能重载。
3.派生类不能继承基类的构造函数。
4.int(*Fun)()中Fun表示是一个函数名。
5.系统生成的缺省的复制构造函数只能完成对象的浅复制。
6.所有运算符都可以重载为成员函数和友元函数。
7.要实现运行时多态,必须使用基类指针调用虚函数。
8.建立派生类对象时,基类构造函数执行顺序由派生类构造函数的初始化列表顺序确定。
9.函数voidf(int)throw()表示f可以抛出任何异常类型。
10.cin只能接收除空白符之外的字符,而get()函数可以接收空白符字符。
二、选择题(每题2分,共20分)
1.类的“同一接口,多种方法”体现了类的______特征。
A.多态B.封装C.继承D.抽象
2.设A为类,则A*(*fpA[5])()的正确描述是______。
A.fpA是一个数组,数组元素是A类对象。
B.fpA是指针数组,数组元素是A类对象的指针。
C.fpA是指针数组,每个元素是一个无参函数的地址,函数返回A类对象。
D.fpA是指针数组,每个元素是一个无参函数的地址,函数返回A类对象地址。
3.______是对this指针错误的描述。
A.*this表示调用成员函数的对象。
B.调用类的非静态函数都隐含使用了this指针。
C.在程序中可以将对象的地址赋给this指针进行。
D.this->
X和(*this).X的作用相同,都是访问对象的X成员。
4.类声明如下,类中的成员a属于______。
classA{
chara;
A(charn):
a(n){}};
A.公有数据成员B.保护数据成员C.私有数据成员D.私有函数成员
5.下列关于new运算的错误描述是______。
A.new运算创建的对象存放在动态区。
B.new运算创建对象时不会调用类的构造函数。
C.new运算的可以重载。
D.释放new运算创建的对象需要调用析构函数。
6.B类是A类的公有派生类,B类和A类都定义了虚函数f()。
p是一个A类的指针。
则p->
f()的操作是______。
A.根据p所指的对象类型来确定调用的函数。
B.调用B类中的f()函数。
C.调用A类中的f()函数。
D.该操作错误。
7.关于虚函数的正确描述是______。
A.抽象类中的成员函数都是虚函数。
B.只能通过指针和引用调用虚函数。
C.含有虚函数的类不能实例化。
D.虚函数不能是静态函数。
8.虚基类解决了多继承中的______。
A.封装性B.二义性C.多态性D.提高运行效率
9.文件中有3个指针,ios:
beg、ios:
end、ios:
cur。
能够读写的指针是______。
A.ios:
begBios:
endC.ios:
curD.ABC
10.设A为抽象类,则正确的说明语句是。
A.AaB.Afun(int)C.intf(A)D.A*p
三、概念填空题(每空1分,共10分)
1.打开文件后,系统就为文件建立了文件指针。
在1类中定义了3个文件指着:
ios:
beg指向文件的2,ios:
end指向文件的3,ios:
cur指向文件的4。
在istream和ostream中定义了一些函数可以来改变5指针的位置,每次读/写操作后,6指针的位置会发生改变。
2.运算符重载时,其函数名由7和运算符共同构成。
双目运算符重载为类的成员函数时,函数需要8个参数。
这时双目运算符的左操作数是9,右操作数是10。
四、程序填空题(每空2分,共30分)
1.填空及写出程序运行的结果。
cstring>
classbook{
char*Bookname,*Author;
book(char*,char*);
book(book&
~book();
virtualvoidprint();
book:
book(char*bookname,char*author){
Bookname=newchar[strlen(bookname)+1];
strcpy(Bookname,1);
Author=newchar[strlen
(2)+1];
strcpy(Author,author);
~book(){3;
delete[]Author;
book(book&
rb){
Bookname=newchar[strlen(rb.Bookname)+1];
strcpy(Bookname,rb.Bookname);
Author=newchar[strlen(rb.Author)+1];
strcpy(Author,rb.Author);
voidbook:
print(){cout<
Bookname<
Author<
classseries:
publicbook{
char*Sername;
intVolume;
series(char*,char*,char*,int);
series(book&
char*,int);
~series();
voidprint();
series:
series(char*bookname,char*author,char*sername,intvolume):
book(bookname,author){
Sername=newchar[strlen(sername)+1];
strcpy(Sername,sername);
Volume=volume;
series(book&
bk,char*sername,intvolume):
4{
Volume=5;
~series(){delete[]Sername;
voidseries:
print(){
6;
//调用book类的print()函数
Sername<
Volume<
booka("
C++"
"
Wu"
seriesb(a,"
TP312C"
5);
b.print();
___7______8______9______10__
2.为学生类重载插入、提取和小于运算符。
小于的含义是比较key的大小。
classstudent{
intkey;
stringname;
booloperator<
(student&
friendostream&
conststudent&
)//输出学生数据
friendistream&
operator>
>
(istream&
student&
//输入学生数据
ostream&
out,conststudent&
stu){
11;
12;
istream&
in,student&
13;
14;
boolstudent:
operator<
stu){return15;
1.试列举过程化、模块化、结构化等程序设计方法的主要特点。
面向对象程序设计是如何包容和吸收其它几种程序设计方法的有用成分的。
六、程序设计题(每题15分,共30分)
1.设计如下类:
①CShape抽象类。
CShape有2个纯虚函数virtualdoublearea()和virtualdoublevolume(),没有数据成员。
②CShape公有派生矩形类CRectangle。
CRectangle新增数据成员doublewidth和length。
给出了基类虚函数的实现,分别返回矩形面积和体积。
并设计CRectangle类的构造和复制构造函数。
③CRectangle公有派生立方体类CBox。
CBox新增数据成员doubleheight,改写virtualdoublevolume()返回立方体体积。
并设计CBox类的构造和复制构造函数。
2.自定义字符串类CString如下。
CString(constchar*str=NULL);
//构造函数
other);
//复制构造函数
CString&
operator+=(constCString&
//+=运算符重载函数
~CString();
//析构函数
char*m_data;
//指向存放字符的动态区首址
CString(constCString&
other){
delete[]m_data;
m_data=newchar[strlen(other.m_data)+1];
设计如下函数:
①CString(constchar*str=NULL)构造函数;
②~CString()析构函数;
③CString&
实现CString对象的字符串自加other的字符串。
复习题一答案
1
2
3
4
5
6
7
8
9
10
√
×
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 复习题
![提示](https://static.bdocx.com/images/bang_tan.gif)