}
程序运行结果:
InPointcopyconstructor.
InPointcopyconstructor.
InPointcopyconstructor.
InPointcopyconstructor.
inDistancecopyconstructor.
Thedistanceis:
5
(一)填空题
在类体内使用关键字(static)说明的成员称为静态成员。
2、重载的函数要求参数的(个数)和(类型)不同。
3、如果要表示某个变量的值不能修改,用修饰符(const)限制。
4、对函数intfun(intx,inty)中的参数x指定默认值10正确的声明方式是(intfun(inty,intx=10))。
5、C++语言规定,成员函数如果被定义在类体内,则为默认为(内联成员函数)。
6、在类层次结构中,创建子类对象时,(派生类)构造函数最后被执行。
7、C++规定,运行多态性通过(基)类的指针或者(引用)调用(虚函数)来实现。
8、派生类的生成过程经历了三个步骤:
(吸收基类成员)、(改造基类成员)和(添加新的成员)。
9、面向对象程序设计的4个基本特征是(抽象)、(继承)、(封装)、(多态)。
10、Windows应用程序采用基于(消息)的事件驱动运行机制。
11、通常将用来派生新类的类称为(基类),又称为父类,而将派生出来的新类称为(派生类),又称为子类。
12、含有(纯虚)函数的类称为抽象类。
13、引用与被引用的实体具有相同的(地址)。
14、类成员的访问权限有3种(共有类型)、(私有类型)、(保护类型)。
15、通过函数改变实参的数据,c++可以通过(指针)或者(引用)实现。
16、c++通过(函数重载)实现静态多态性,其(形参个数或类型)必须不同。
18、c++类的用途有两种,一种是生成类的对象,另一种是通过(继承)派生出新类。
19、在类Ctest的定义中,其拷贝构造函数的声明是(Ctest(Ctest&C);)。
20、抽象类必须有一个(纯虚)函数,并且不能产生自己的(对象)。
21、C++规定,动态联编通过多态性来实现,实现多态性的同名函数必须(形参表和返回值)相同。
22、面向对象的模型中,最基本的概念是对象和(类)。
23、软件设计模块化的目的是(降低复杂性)。
24、派生类的成员一般分为两部分,一部分是(改造基类的成员),另一部分是自己定义的新成员。
25、在函数参数传递中,解决大的对象传递效率,最好使用(引用)为参数
26、如果要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是(friendclassA;)。
27、如果类B继承了类A,则称类A为类B的基类,类B称为类A的(派生类) 。
28、将x+y中的+运算符用友元函数重载应声明为(friendComplexoperator+(constComplex&x,constComplex&y);)
30、在多态性的实现中,在基类与派生类的虚函数除名字相同外,(形参表和返回值)也必须相同。
31、用const定义的常量必须进行(赋初值)。
32、函数重载要求函数名相同,(形参个数或类型)不同。
33、构造函数名必须与类名(相同)
34、在面向对象的程序设计中,对象是指(属性)和(行为)的封装体。
36、创建对象时系统自动调用(构造)函数。
37、用一个对象去构造同类的另一个新对象需要调用(复制构造函数)。
38、用new为对象动态分配内存,当程序完毕必须用(delete)释放。
39、类的每个普通成员函数都有一个隐含的this指针参数,this指针指向(正在被成员函数操作)的对象。
40、设pt为T类的一个指针,pt=newT[10]操作须调用(10)次构造函数。
(二)判断题(正确的请写T,错误的请写F)
1、引用作为函数参数在函数内可对被直接引用的变量进行操作。
T
2、函数的返回值类型不同可以重载。
F
3、同类对象间可以整体赋值。
T
4、类的构造函数可以重载。
T
5、C++中标识符内的大小写字母是没有区别的。
F
6、静态成员函数可以直接调用类中说明的非静态成员。
F
7、友元破坏了类的封装和隐蔽性。
T
8、在多继承时,在调用不同基类中的相同成员时可能出现二义性。
T
9、抽象类自身无法实例化。
T
10、析构函数由于没有参数,它不能被重载。
T
11、使用关键字class定义的类中缺省的访问权限是public。
F
12、光标、位图、对话框和菜单都是资源。
T
13、说明函数原型时不需要指明每个函数参数的名字,只需要说明每个参数的类型和返回值类型就可以了。
T
14、类的静态数据成员需要在定义每个类的对象时进行初始化。
F
15、字符串’hello,world”在内存中存放时,占用11个字节的空间。
F
16、构造函数的主要功能就是用来初始化对象。
T
17、用new运算符动态分配的存储空间若不用delete释放,则程序运行结束后该空间会自动释放。
F
18、基类的私有成员函数根本就不会继承,更谈不上使用。
T
19、友元关系是单向的不可逆的。
T
20、this指针隐含于每一个成员函数中。
F
21基类的构造函数和析构函数是能被继承的。
F
22、如果一个类中,用户没有定义拷贝构造函数时,系统自动创建一个默认的拷贝构造函数。
T
24、成员函数的参数不可以设置为默认值。
F
25、静态成员的特点是它不仅是属于某对象的,而是属于整个类的,即所有对象的。
T
27、delete运算符的功能是用来释放使用new运算符申请的内存。
F
28、在私有继承方式下,基类中公有成员和保护成员在派生类中都为私有成员。
T
29、基类的私有成员函数可以被继承。
T
30、在多继承时,在调用不同基类中的相同成员时可能出现二义性。
T
31、联编是指计算机程序自身彼此关联的过程,也就是把一个标识符名和一个存储地址联系在一起的过程。
T
32、函数重载和运算符重载就是通过动态联编方式实现的编译时的多态的体现。
F
33、虚函数是动态联编的基础。
T
35、运算符重载之后运算符的优先级和结合性都会改变,并且要保持原运算符的语法结构。
参数和返回值类型可以重新说明。
F
36、在程序能正确支持所设计的正常情况之后,再添加语句来处理异常情况,这种思想就是异常处理。
T
37、MFC是一个功能强大、结构复杂和庞大的类库。
T
38、C++支持多态性。
T
40、返回值类型、参数个数和类型都相同的函数也可以重载。
F
41、“引用”作为目标的别名而使用,对引用的改动实际就是对目标的改动。
引用不是值,不占存储空间,声明引用时,目标的存储状态不会改变。
T
42、使用关键字class定义的类中缺省的访问权限是私有(private)的。
T
43、一个抽象类至少具有一个纯虚函数。
T
44、类的静态数据成员需要在定义每个类的对象时进行初始化。
F
45、当将一个类S定义为另一个类A的友元类时,类S的所有成员函数都可以直接访问类A的所有成员。
T
46、当函数的返回值是数组类型的,传递的是数组第一个元素的地址。
T
47、构造函数可以声明为虚函数。
F
(三)选择题
1、关于成员函数特征的下列描述中,(A)是错误的。
A、成员函数一定是内联函数;B、成员函数可以重载;C、成员函数可以设置缺省参数值;D、成员函数可以是静态的。
2、voidmain(){charstr[10]={'a','b','c'};cout<<*str;}的输出为(A)。
A、a;B、b;C、c;D、abc;E、以上都不是。
3、(C)是析构函数的特征。
A、析构函数可以有一个或多个参数;B、析构函数名与类名不同;C、析构函数的定义只能在类体内。
4、C++语言中函数返回值的类型由(B)决定。
A、return语句的表达式的类型;B、定义函数时所指明的返回值类型;C、实参类型;D、调用函数类型
5、inta=10;int*pa=&a;int&ia=a;*pa=20;ia=30;cout<A、10;B、20;C、30;D、40。
6、在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用(A)比较合适。
A、内联函数;B、重载函数;C、递归调用;D、嵌套调用。
7、voidmain(){charstr[10]={'a','b','c'};cout<A、a;B、b;C、c;D、abc;E、以上都不是。
8、静态数据成员的特点不正确的是(D)。
A、静态数据成员不是属于某个对象,而是属于整个类的。
B、静态数据成员不随对象的创建而分配内存空间,它也不随对象被释放而撤销。
只有在程序结束时才被系统释放。
C、静态数据成员只能在类体外被初始化
D、静态数据成员可以不初始化
10、(C)不是构造函数的特征。
A、构造函数的函数名与类名相同;B、构造函数可以重载;C、构造函数必须指定类型说明
11、下列关于C++语言类的描述中错误的是(C)
A)类用于描述事物的属性和对事物的操作
B)类与类之间通过封装而具有明确的独立性
C)类与类之间必须是平等的关系,而不能组成层次结构
D)类与类之间可以通过一些方法进行通信和联络
12、下面函数(C)的表示方法说明它使用对象的引用作为参数。
A)test(pt*p)B)test(ptp) C)test(pt&p)D)test(constP)
13、以下叙述中正确的是(B)
A)构成C++语言程序的基本单位是类 B)可以在一个函数中定义另一个函数
C)main()函数必须放在其他函数之 D)所有被调用的函数一定要在调用之前进行定义
14、己知有定义:
constintD=5;
inti=1;
doublef=0.32;
charc=15;
则下列选项错误的是(B)
A)++i;B)D--;C)C++;D)--f;
15、以下程序的输出结果是(A)
#include
voidreverse(inta[],intn)
{inti,t;
for(i=0;i{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
}
voidmain()
{intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0;
reverse(b,8);
for(i=6;i<10;i++)s+=b[i];
cout<
}
A)22B)10C)34D)30
18、下列描述中,正确的是(C)
A)虚函数是一个static类型的成员函数; B)虚函数是一个非成员函数;
C)抽象类是指具有纯虚函数的类;D)抽象类可以说明其对象;
19、友元的作用是(A)。
A)提高程序的运用效率;B)加强类的封装性;
C)实现数据的隐藏性;D)增加成员函数的种类;
20、下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,在划线处应填入的选项是(D)
#include
voidmain()
{inti=0,j,k;
do{i++;k=316-13*i;}while();
j=k/11;
cout<<”316=13*”<
}
A)k/11B)k%11C)k/11==0D)k%11==04、找出程序中的错误并改正(10分)
classstudent()
{
private:
public:
display(){}
}};
//-----------------------------------------------
voidg()studentg()
{
students;
returns;
}
//------------------------------------------------
mian()voidmain()
{
students1;
s1->display();s1.display();
}
读程序写结果
15、
#include
classBase{protected:
intx,y;
public:
Base(intx1=0,inty1=0){x=x1;y=y1;}
virtualvoiddisplay()=0;
};
classSub1:
publicBase{protected:
floatz;
public:
Sub1(intx2,inty2,floatz1):
Base(x2,y2){z=z1;}
virtualvoiddisplay()
{cout<<”x=”<};
classSub2:
publicBase{protected:
charch;
public:
Sub2(intx2,inty2,charch1):
Base(x2,y2){ch=ch1;}
virtualvoiddisplay()
{cout<<”x=”<};
classSub11:
publicSub1{protected:
floatw;
public:
Sub11(intx3,inty3,floatz2,floatw1):
Sub1(x3,y3,z2){w=w1;}
virtualvoiddisplay()
{Sub1:
:
display();cout<<”w=”<};
voidfn(Base&s){s.display();}
main(){Sub1a(1,2,3.0),Sub2b(1,2,‘c’),Sub11c(1,2,3.0,4.0);
fn(a);fn(b);fn(c);}
结果:
x=1
y=2
z=3
x=1
y=2
ch=c
x=1
y=2
z=3.0
w=4.0
据以下要求写程序。
1、基类:
Person,数据成员:
姓名name;成员函数:
display()。
由基类派生Student和Teacher类。
Student类,数据成员:
班级,classname;成员函数:
display()。
Teacher类,数据成员:
部门,dpt;成员函数:
display()。
由Student和Teacher类派生Graduatestudent。
Graduatestudent类,数据成员:
主攻方向,major;成员函数:
display()。
实例化一个Graduatestudent对象,并能显示其信息。
(请注意对同名成员的处理)
voidTeacher:
:
display(){
Person:
:
display();
2、
两个基类:
演员类,器械类。
一个派生类:
杂技类。
(这三个类均要求有构造函数)
演员类要求有演员的名字,器械类要求有器械的名字(如:
钢丝、盘子等),杂技类要求有杂技节目名称(如空中走钢丝)。
程序能够输出杂技节目名称,演员名字及所用器械。
#include
classActor{
private:
String_name;
public:
Actor(char*name){
_name=name;}
constString&getName()const{return_name;}};
classProp{
private:
String_name;
public:
Prop(char*name){
_name=name;}
constString&getName()const{return_name;}};
classAcrobatics{
private:
Actor*_actor;
Prop*_prop;
public:
Acrobatics(char*actorName,char*propName){
_actor=newActor(actorName);
_prop=newProp(propName);}
constString&getActorName()const{return_actor->getName();}
constString&getPropName()const{return_prop->getName();}};
voidmain(){
Acrobaticsacro("Tom","ball");
cout<<"Actoris:
"<"<
3、定义一个类,使得在该类的构造函数和析构函数中各输出一行文本,且构造函数能完成该类的部分数据成员的赋值。
在主函数中调用该类的一个成员函数,来输出该类的一个数据成员。
#include
4、计算图形面积,声明一个Shape(形状)基类,它有三个派生类——Circle(圆)和Square(正方形),三角形(Triangle)
已知
(1)圆的半径r,
(2)矩形的长a、宽b,(3)三角形的三个边a、b、c
要求利用多态性(纯虚函数、抽象类)计算上述三种任何一种图形的面积
constdoublePI=3.14;
classShape
{
public:
virtualdoubleShowArea()=0;
};
classCircle:
publicShape
{
private:
doubleradius;
public:
Circle(doubler):
radius(r){}
doubleShowArea(){returnPI*radius*radius;}
};
classRectangle:
publicShape
{
private:
doublelength;
doublewidth;
public:
Rectangle(doublel,doublew):
length(l),width(w){}
doubleShowArea(){returnlength*width;}
};
classSquare:
publicShape
{
private:
doublelength;
public:
Squa