结果输出为:
__①___。
11.所有的文档类都派生于____①___,所有的视图类都派生于_②_____。
12.为解决多继承中因公共基类而产生的二义性问题,C++语言提供了___①____机制。
将公共基类声明为它以后,它在派生类中只产生一个实例。
13.对象中封装了描述该对象的①和②,每个对象就是一个微小的程序。
14.类是抽象的,①占用内存,而对象是具体的,②占用内存。
15.C++运行时的多态性通过____① 来实现,而编译时的多态性通过___②___来实现。
16.常(只读)成员函数用____①____关键字标识,内联成员函数用____②____关键字标识。
17.C++中函数的参数传递一种是按值传递,另一种是地址传递或____①____传递。
18.封装可以使得程序中各部分之间的相互影响变①,并且提高程序的安全性。
19.继承的方式有三种:
①继承、②继承、③继承。
20.如果异常错误类型为C++的类,并且该类有其基类,则应该将①类的错误处理程序放在前面,②类的错误处理程序放在后面。
21.向对象程序设计的方法是抽象和分类,步骤是:
(1)①;
(2)描述类与类之间的关系;
(3)用类来界定程序层次,从而组织程序结构。
【参考答案】
1.①运行②编译
2.①控件通知 3.①模板类②模板函数
4.①相同②不同5.①ch=d
6.①UpdateData
7.①串行化 8.①纯虚函数
9.①友员函数
10.①2511.①CDocument②CVew
12.①虚基类
13.①属性②操作14.①不要②要
15.①虚函数②重载函数16.①const②inline
17.①引用18.小
19.①公有②保护③私有
20.① 派生类②基类 21.①找出类
二、选择题
1、如果在基类和派生类中都包含其他类的对象(即有对象成员),则在创建派生类的对象时,首先执行[1]的构造函数,接着执行[2]的构造函数,然后执行__[3]___的构造函数,最后才执行[4]的构造函数。
A、基类的对象成员B、派生类的对象成员
C、基类D、派生类
2、若MyClass是一个类名,且有如下语句序列
MyClassc1,*c2;
MyClass*c3=newMyClass;
MyClass&c4=c1;
上面的语句序列所定义的类对象的个数是[5]
A、1 B、2 C、3 D、4
3、要定义一个引用变量p,使之引用类MyClass的一个对象,正确的定义语句
是[6]
A、MyClassp=MyClass;B、MyClassp=newMyClass;
C、MyClass&p=newMyClass;D、MyClassa,&p=a;
4、[7]包括键盘和鼠标的输入。
这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由程序来处理消息;[8]用来与Windows的控制对象,如列表框、按钮、复选框等进行双向通信。
当用户在列表框中改动当前选择或改变了复选框的状态时发出此类消息。
A、系统消息B、用户消息C、输入消息D、控制消息
5、下列关于继承方式的描述中,错误的是[9]
A如果不显式地指定继承方式,缺省的继承方式是私有(private)
B采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员
C采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员
D采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员
6、假定MyClass为一个类,则执行”MyClassa[3],*p[2];”语句时,自动调用该类构造函数的次数为[10]。
A、2B、3C、4D、5
7、在C++中,若对函数未加说明,则函数的隐含类型是 [11]
A、intB、doubleC、voidD、char
8、类AB的缺省构造函数和析构函数是 [12]
A、AB()和~AB()B、AB(int)和~AB()
C、AB()和~AB(delete)D、AB()和int~AB()
9、滚动条类CScrollBar的成员函数规定了滚动条的操作。
设置滚动条的范围使用[13]函数,设置滚动块的位置使用[14]函数,获取滚动块的当前位置使用[15]函数。
A、SetPosB、SetRangeC、SetScrollRangeD、GetPos
E、SetScrollPosF、GetScrollPosG、GetScrollRange
10、如果类中的成员只能被本类的成员函数和友元函数访问,则这些成员的访问权限为___[16]_;如果类中的成员能够被类外的函数访问,则这些成员的访问权限为:
___[17]__。
A、protectedB、privateC、publicD、static
11、列表框分为[18]和[19]两种,[20]中任一时刻只能选择一项。
A、组合框B、单选列表框C、多选列表框D、编辑框
12、采用函数重载的目的在于[21]。
A.实现共享B.减少空间C.提高速度D.使用方便,提高可读性
13、下列do-while循环的循环次数为[22]。
已知:
inti=6;
do{cout<i--;
}while(i!
=0);
A.0B.1C.3D.无限
14、C++语言中规定函数的返回值的类型是由[23]。
A.return语句中的表达式类型所决定B.调用该函数时的主调用函数类型所决定
C.调用该函数时系统临时决定D.在定义该函数时所指定的函数类型所决定
15、[24]是子类对父类的函数覆盖而不是重载,而覆盖是一种浮在表面的遮掩,而不是渗透性、摧毁性的重建。
A.重载函数B.友元函数C.虚函数D.模板函数
16、要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用[25]合适。
A.内联函数;B.重载函数;C.递归调用;D.嵌套调用。
17、下列函数中,[26]不能重载.
A.成员函数B.非成员函数C.析构函数D.构造函数
18、.继承具有[27],即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员.
A.规律性B.传递性C.重复性D.多样性
19、已知:
print()函数是一个类的常成员函数,它无返回值,下列表示中[28]是正确的。
A.voidprint()constB.constviodprint()C.voidconstprint()D.voidprint(const)
20、.类模板的使用实际上是将类模板实例化成一个具体的[29]。
A.类B.对象C.函数D.模板类
21、[30]是析构函数的特征.
A.一个类中只能定义一个析构函数B.析构函数名与类名不同
C.析构函数的定义只能在类体内D.析构函数可以有一个或多个参数
【参考答案】
题号
1
2
3
4
5
6
7
8
9
10
答案
A
C
B
D
B
D
C
D
D
B
题号
11
12
13
14
15
16
17
18
19
20
答案
A
A
C
E
F
B
C
B
C
B
题号
21
22
23
24
25
26
27
28
29
30
答案
D
C
D
C
A
C
B
A
D
A
三、简述题
1、简述面向对象程序设计的基本思想、方法和步骤。
解答要点:
(1)基本思想描述(+3分)
(2)方法:
抽象与分类(+2分)
(3)步骤:
1.找出类(+1分)2.描述类与类之间的关系(+1分)3.用类来界定抽象层次,从而组织程序结构(+2分)。
2、简述对象化编程与过程化编程的优缺点。
解答要点:
(1)对象化编程特点描述
(2)过程化编程特点描述
(3)两者比较
四、阅读程序,写出运行结果
1.
//////////////////////////////
//cat.h//
//////////////////////////////
#include
classCat
{public:
intGetAge();
voidSetAge(intage);
voidMeow();//喵喵叫
protected:
intitsAge;
};
intCat:
:
GetAge()
{returnitsAge;}
voidCat:
:
SetAge(intage)
{itsAge=age;}
voidCat:
:
Meow()
{cout<<“Meow.\n”;}
////////////////////////////////////////
//cat.cpp//
////////////////////////////////////////
#include
#include“cat.h”
voidmain()
{Catfrisky;
frisky.SetAge(5);
frisky.Meow();
cout<<“friskyisacatwhois”
<<<“yearsold.\n”;
frisky.Meow();}
2.===========================================================
#include
classA
{public:
A();A(inti,intj);
~A(){cout<<"Destructor.\n";}
voidprint();
private:
inta,b;
};
A:
:
A()
{a=5;b=10;
cout<<"Defaultconstructor.\n";}
A:
:
A(inti,intj)
{a=i,b=j;cout<<"Constructor.\n";}
voidA:
:
print()
{cout<<"a="<voidmain()
{Aobj1,obj2(15,18);
obj1.print();
obj2.print();}
3.=========================================================================
#include
classVehicle//汽车类
{protected:
intnumWheels;//车轮数
intrange;//汽车活动范围
public:
Vehicle(intw,intr):
numWheels(w),
range(r)
{cout<<"Vehicleconstructoriscalled"
<}
voidShowV()
{cout<<"Wheels:
"<<cout<<"Range:
"<}
};
classCar:
publicVehicle//小矫车
{intpassengers;//乘客数
public:
Car(intw,intr,intp):
Vehicle(w,r),
passengers(p)
{cout<<"Carconstructoriscalled"
<}
voidShow()
{cout<<"\nCar:
\n";
ShowV();
cout<<"Passengers:
"<<}
};
voidmain()
{Carc(4,600,6);
c.Show();
}
4.========================================================================
#include
#include
intnextStudentID=0;
classStudentID
{
public:
StudentID()
{value=++nextStudentID;
cout<<”Assigningstudentid”<cout<<”nextStudentID=”<}
~StudentID()
{--nextStudentID;
cout<<”Destructingid”<cout<<”nextStudentID=”<}
protected:
intvalue;
};
classStudent
{public:
Student(char*pName=”noName”)
{cout<<”Constructingstudent”<strcpy(name,pName);
}
protected:
charname[20];
StudentIDid;
};
intfn()
{staticinti=6;
++i;
returni++;
}
voidmain()
{Students(“Randy”);
cout<}
5.============================================================
#include
voidmain()
{intx=7,y=3;
switch(x%2)//求余数
{case1:
switch(y)
{case0:
cout<<"AAAA\t";
case1:
cout<<"BBBB\t";break;
default:
cout<<"CCCC\t";
}
case2:
cout<<"Thanks\n";
}
}
6.============================================================
#include
#include
template
Tmin(T&a,T&b)
{returna>b?
b:
a;}
char*min(char*a,char*b)
{return(strcmp(a,b)>0?
b:
a);}
voidmain()
{cout<cout<7.===========================================================
#include
classperson
{friendvoiddisplay(person*);
char*name;
intage;
public:
person()
{name=“Mary”;age=18;
cout<<”1111111111”<person(char*str,inti)
{name=str;age=i;
cout<<”constuctoriscalled.”<}
~person()
{cout<<”destructoriscalled”<}
};
voiddisplay(person*a)
{cout<name<age<}
voidmain()
{persondemo(“Frank”,30),demo1;
display(&demo);display(&demo1);
}
8.==========================================================
#include
usingnamespacestd;
classMyClass
{public:
MyClass();
MyClass(int);
~MyClass();
voidDisplay();
protected:
intnumber;
};
MyClass:
:
MyClass()
{cout<<“Constructingnormally\n”;}
MyClass:
:
MyClass(intm)
{number=m;
cout<<“Consturctingwithanumber:
”
<}
voidMyClass:
:
Display()
{cout<<”Displayanumber:
”<<}
MyClass:
:
~MyClass()
{cout<<“Destructing\n”;}
voidmain()
{MyClassobj1;
MyClassobj2(20);
obj1.Display();
obj2.Display();
}
[参考答案]
1、Meow(+2分)
friskyisacatwhois5yearsold(+2)
Meow(+2分)
2、====================================
Defaultconstructor(+1分)
Constructor(+1分)
a=5,b=10(+1分)
a=10,b=18(+1分)
Destructor(+1分)
Destructor(+1分)
3、====================================================================
Vehicleconstructoriscalled..(+1分)
Carconstructoriscalled..(+1分)
Car:
(+1分)
Wheels:
4(+1分)
Range:
600(+1分)
Passengers:
6(+1分)
4、====================================================================
Assigningstudentid1(+1分)
nextStudentID=1(+1分)
ConstructingstudentRandy(+1分)
9,7(+1分)
Destructingid1(+1分)
nextStudentID=0(+1分)
5、==============================================================
CCCC(+3)
Thanks(+3)
6.==============================================================
Good(+3)
3(+3)
7、==========================================================
constuctoriscalled.----(+1分)
1111111111----(+1分)
Frank30----(+1分)
Mary18----(+1分)
destructoriscalled----(+1分)
destructoriscalled----(+1分)
8、==================================================================
Constructingnormally(+1分)
Construcingwithanume:
20(+1分)
Displayanumber:
8973//随机数(+1分)
Displayanumber:
20(+1分)
Destructing(+1分)
Destructing(+1分)