面向对象程序设计复习提纲.docx
《面向对象程序设计复习提纲.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计复习提纲.docx(29页珍藏版)》请在冰点文库上搜索。
面向对象程序设计复习提纲
一、填空题
1.c++中变量按照作用范围可分为局部变量和全局变量。
2.动态联编支持的多态性称为运行时的多态性,也称为动态多态性。
3.在一个函数的定义或声明前加上关键字inline时,该函数就声明为内联函数。
4.在类中定义和实现的函数称为成员函数。
5.程序中可以有多个名称相同,但参数类型不同或个数不同或类型与个数都不同的函数,这种现象称为函数重载。
6.若定义inta[][4]={1,2,3,4,5,6,7,8,9},则数组a的第一维的大小是3。
7.设置虚基类使用的关键字为virtual。
8.基类的构造函数和析构函数,不能被派生类继承。
9.含有纯虚函数的类称为抽象类,它不能定义对象,主要用作基类。
10.动态联编支持的多态性称为运行时的多态性。
11.运算符重载函数的两种主要形式有成员函数和友元函数。
12.使用模板是为了提高代码的可重用性。
13.在C++语言中,变量按照生存周期分为静态存储类别变量和自动存储类别变量。
14.非成员函数应声明为类的友元函数,才能访问该类的private成员。
15.在类中,数据成员和成员函数的默认访问属性是private(或私有的)。
16.如果一个类至少有一个纯虚函数,那么该类被称为抽象类。
17.对于含有对象成员的派生类,其构造函数的执行顺序为:
先执行基类的构造函数、再执行对象成员所属类的构造函数,最后执行派生类的构造函数。
18.构造函数是一种特殊的成员函数,其作用是对类的数据成员进行初始化并执行对象的其他内部管理操作。
19.静态成员函数不能直接引用类中说明的非静态成员。
20.对于含有对象成员的派生类,其析构函数的执行顺序为:
先派生类的析构函数、再执行对象成员所属类的析构函数,最后执行基类的析构造函数。
21.设置友元函数的目的是为能够访问该类的私有成员。
22.运算符重载仍然保持原来的优先级、结合性和语法结构。
23.基类的私有成员不能被派生类的成员访问。
24.静态联编支持的多态性称为编译时的多态性,也称静态多态性。
25.任何类中允许有三种访问权限的数据,这三种访问权限分别是私有的(private)、被
保护的(protected)、公有的(public)。
26.C++中封装性、继承性和多态性是面向对象程序设计的三个主要特性。
27.实现运行时的多态性要使用继承和虚函数。
28.将双目运算符重载为某类的成员函数时,该成员函数的左操作数为当前对象(或
*this),右操作数为函数参数。
29.C++程序运行时,总是从主函数(main)开始执行。
30.从实现的角度看,多态性可以分为编译时的多态性和运行时的多态性。
31.抽象类只能作为基类使用,而不能声明它的对象。
32.一个类可以从直接或间接的祖先中继承所有属性和方法。
采用这个方法提高了软件的可重用性。
33.纯虚函数的声明格式为:
virtual函数返回值的数据类型函数名(形参列表)=0;。
34.静态成员函数没有this指针。
35.类有两个特殊的成员函数,即构造函数和析构函数。
36.运算符op重载时,其函数名是由operatorop构成。
37.无符号整型的类型关键字是unsigned。
39.若定义inta[2][3]={{2},{3}};则值为3的数组元素是a[1][0]。
40.B类是A类的友元,C类是B类的友元,则C类不是A类的友元(如果没有显式声明C是A的友元)。
41.模板声明中的第一个符号总是关键字template。
42.C++语言规定对所有用到的变量要“先定义,后使用”。
43.从用户使用的角度看,函数有两种,即系统(库)函数和用户自定义函数。
44.一个变量的地址称为该变量的指针。
45.使几个不同的变量共占同一段内存的结构称为共用体。
46.引用是给对象取一个别名,它引入了对象的同义词。
47.用已有对象复制一个新对象时调用复制构造函数。
48.C++提供的预处理功能主要有宏定义、文件包含和条件编译。
49.C++中static用声明的变量称为静态变量。
50.程序的三种控制结构包括顺序结构、选择结构和循环结构。
51.C++中可重用性是通过继承这一机制来实现的。
52.名称为sample的类的复制构造函数的原型声明语句为sample(constsample&);。
53.如果参加运算的两个数中有一个数为float型数据,则运算的结果是double型。
。
54.在定义函数时函数名后面括号中的变量名称为形式参数,在主调函数中调用一个函数时,函数名后面括号中的参数称为实际参数。
55.如果有一个变量是专门用来存放另一变量的地址(即指针)的,则它称为指针变量。
56.在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。
57.一个新类从已有的类那里获得其已有特性,这种现象称为类的继承。
58.向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法),这种现象称为多态性。
59.在派生类中,对基类的继承方式可以有公用继承、私有继承、保护继承。
60.派生类中的成员包括从基类继承过来的成员和自己增加的成员两大部分。
、选择题
1.在一个C++程序文件中,main()函数的位置D。
A)必须在开始B)必须在最后C)必须在系统调用库函数后D)可以任意
2.下列属于C++合法的字符常量是C。
3.设intx=10,x+=3+x%(-3),则x=A。
A)14B)15C)11D)124.下列运算符,不能重载为友元函数的是A。
A)=、()、[]、->B)+、-、++、--C)<、>、<=、>=D)+=、-=、*=、/=
5.在C++中,要实现动态联编,必须使用D调用虚函数
A)类名B)派生类指针C)对象名D)基类指针
6.成员运算符obj1>obj2被C++编译器解释为D。
A)operator>()B)>(obj1,obj2)
C)obj2.operator>(obj1)D)obj1.operator>(obj2)
7.在C++中,用于实现运行时多态性的是B。
A)内联函数B)虚函数C)模板函数D)重载函数
8.在下列函数原型中,可以作为类AA构造函数的是D。
A)voidAA(int);B)intAA();C)AA(int)const;D)AA
(int);
9.对于语句cout<A)“cout”是一个输出流对象B)“endl”的作用是输出回车换行
C)“<<”称作流提取运算符D)“x”是一个变量
10.编译预处理命令以D结尾。
A);B).C)\D)回车键
11.下列运算符中,在C++语言中不能重载的是___C
A)*B)>=C):
:
D)/
12.函数调用语句fun(a+b,3,max(n-1,b));中,实参的个数为A___
D)6
;,则数值为9的表达式是
A)3B)4C)513.若有说明inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a__B___。
A)*p+9B)*(p+8)C)*p+=9D)p+714.有关虚函数的说法不正确的是B___。
A)只有类的成员函数才能说明为虚函数B)静态成员函数可以是虚函数
C)构造函数不能是虚函数D)析构函数可以是虚函数
15.逗号表达式a=4,b=6,a--,b--,a+b的值为___B__。
16.对于类中定义的成员,其隐含访问权限为B
18.声明一个类的对象时,系统自动调用一个函数;撤消对象时,系统自动调用一个函数;这两个函数分别为__C
A)成员函数;构造函数
C)构造函数;析构函数
B)复制构造函数;析构函数
D)析构函数;复制构造函数
19.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的__A_
A)private成员B)protected成员C)public成员D)友元20.在C++中,要实现动态联编,必须使用___D___调用虚函数
A)类名B)派生类指针C)对象名D)基类指针
21.若一个类中含有纯虚函数,则该类称为A___。
A)抽象类B)纯基类C)派生类D)基类
22.设n=8,i=4,则赋值运算n%=i+1执行后,n的值是B___。
C)obj2.operator>(obj1)D)obj1.operator>(obj2)27.下列运算符中,在C++语言中不能重载的是___C。
A)*B)>=C):
:
D)/28.下面对友元函数描述正确的是__C。
A)友元函数的实现必须在类的内部定义B)友元函数是类的成员函数
C)友元函数破坏了类的封装性和隐藏性D)友元函数不能访问类的私有成员
29.下面叙述不正确的是___A__。
A)基类的保护成员在派生类中仍然是保护成员
B)基类的保护成员在公有派生类中仍然是保护成员
C)基类的保护成员在私有派生类中是私有成员
D)对基类成员的访问必须是无二义性
30.考虑函数原型voidtest(inta,intb=7,charz='*'),下面的函数调用中,属于不
合法调用的是C___。
A)test(5)B)test(5,8)C)test(6,"#")D)test(0,0,'*')。
31.下面关于对象概念的描述中,___D__是错误的。
A.对象代表着正在创建的系统中的一个实体B.对象之间的信息传递是通过消息进行
的
C.对象是一个状态和操作(或方法)的封装体D.对象就是C语言中的结构体变量
32.使用派生类的主要原因是___B___。
A.提高程序的运行效率B.提高代码的可重用性C.加强类的封装性D.实现数据的隐藏
33.有关析构函数的说法不正确的是___D__。
A.析构函数有且只有一个B.析构函数无任何函数类型C.析构函数没有形参D.析构函数的作用是在对象被撤消时收回先前分配的内存空间清理功能
34.通常拷贝构造函数的参数是___C___。
A.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名
35.如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是___C__。
A.virtualshow()=0;B.virtualvoidshow();
C.virtualvoidshow()=0;D.voidshow=0virtual;
36.下面关于友元的描述中,错误的是___D___。
A.友元函数可以访问该类的私有数据成员
B.一个类的友元类中的成员函数都是这个类的友元函数
C.友元可以提高程序的运行效率D.类与类之间的友元关系可以继承
37.在C++中,___B__运算符不能重载。
A.+B.?
:
C.-D.<=
38.能用友元函数重载的运算符是A。
A.+B.=C.[]D.->
39.在声明类时,下面的说法正确的是___C。
A.可以在类的声明中给数据成员赋初值
B.数据成员的数据类型可以是register(CPU中存放)
C.private,public,protected可以按任意顺序出现
D.没有用private,public,protected定义的数据成员是公有成员
40.继承具有B__,即当基类本身也是某一个类的派生类时,底层的派生类也会自动
继承间接基类的成员。
A.规律性B.传递性C.重复性D.多样性
41.在多重继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承
的规则A___。
A.完全相同B.完全不同
42.关于成员函数特征的下述描述中,A.成员函数一定是内置函数C.成员函数可以设置参数的默认值
43.下列的各类函数中,
C.部分相同,部分不同A__是错误的。
B.成员函数可以重载D.成员函数可以是静态的
D.以上都不对
C___不是类的成员函数。
C.友元函数
A.构造函数B.析构函数
44.模板的使用是为了C__
A.加强类的封装性B.提高代码的运行效率
D.实现多态性
45.下列表示引用的方法中,___
A.float&t=&m;B.int&y=10;
46.在下面有关对构造函数的描述中,A.构造函数没有返回值C.构造函数必须带有参数
47.友元的作用之一是D___。
A.增加成员函数的种类C.实现数据的隐藏性
48.通常复制构造函数的参数是___A.某个对象名C.某个对象的引用名
49.下列运算符中,
A.+B.?
:
50.下列关于运算符重载的描述中,A.运算符重载可以改变操作数的个数C.运算符重载不可以改变语法结构
51.设有定义inta。
floatf__C__。
D.拷贝构造函数
C.提高代码的可重用性
D___是正确的。
已知:
C.int&z;正确的是___A___。
B.构造函数的名字与类名不完全相同(必须相同)D.构造函数必须定义,不能默认
intm=10;
D.int&x=m;
B.加强类的封装性
D.提高程序的运行效率
C
B.某个对象的成员名
D.某个对象的指针名
B___运算符在C++中不能重载。
C.-
__C__是正确的。
D.<=
doublei
B.运算符重载可以改变优先级
D.运算符重载可以改变结合性a'+i*f值的数据类型是
则表达式10+
A.intB.float
52.对虚函数的调用__D
A.一定使用动态联编
C.一定使用静态联编
53.派生类的对象对它的基类
A.公有继承的公有成员
C.公有继承的保护成员
C.double
D.不确定
B.必须使用动态联编
D.不一定使用动态联编是可以访问的。
B.公有继承的私有成员
D.私有继承的公有成员
54.类模板的使用实际上是将类模板实例化成一个具体的
A___。
A.类(模板类)B.对象C.函数D.模板函数
55.下列关于switch语句的描述中,___A__是正确的。
A.switch语句中default子句可以没有,也可有一个
B.switch语句中每个语句序列中必须有break语句
C.switch语句中default子句只能放在最后
D.switch语句中case子句后面的表达式只能是整型表达式
56.系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项
中,不能作为依据的是D
A.参数个数B.参数的类型
C.函数名称D.函数的类型(即为函数返回值的数据类型)
59.在C++中,关于设置参数的默认值的描述中,正确的是__C
A.不允许设置参数的默认值
B.设置参数默认值只能在定义函数时设置
C.设置参数默认值时,应该是先设置右边的再设置左边的
D.设置参数默认值时,应该全部参数都设置
60.有关类的说法中,不正确的是__D。
A.类是一种用户定义的数据类型
B.类中的成员函数才能存取类中的私有数据
C.在类中,如果不作特别说明,所指的数据均为私有类型
D.在类中,如果不作特别说明,所指的成员函数均为公有类型
61.有关类和对象的说法不正确的是C。
A.对象是类的一个实例B.任何一个对象只能属于一个具体的类
C.一个类只能有一个对象D.类与对象的关系和数据类型与变量的关系相似
62.有关构造函数的说法不正确的是__D___。
A.构造函数名字和类的名字一样B.构造函数在说明类的某个对象时自动执行
C.构造函数无任何函数类型D.构造函数有且只有一个(构造函数可以重载)
63.__D__不是构造函数的特征。
A.构造函数的函数名与类名相同C.构造函数可以设置默认参数
64._A___是析构函数的特征。
A.一个类中只能定义一个析构函数
B.构造函数可以重载
D.构造函数必须指定类型说明
B.析构函数名与类名不同
C.析构函数的定义只能在类体内D.析构函数可以有一个或多个参数
三、读程序写结果
1.#include
usingnamespacestd;
inta[]={1,3,5,7,9};int&fun(inti){returna[i];}intmain()
{inti;
fun(3)=12;for(i=0;i<5;i++)
cout<return0;}运行结果:
135129
2.#include
usingnamespacestd;
classM{
public:
M(inta=0,intb=0){x=a;y=b;}
intgetx(){returnx;}
intgety(){returny;}
private:
intx,y;};
intmain()
{Mop1(5,6);
inti,j;
i=op1.getx();
j=op1.gety();
cout<<"i="<
return0;}运行结果:
i=5,j=6
3.#includeusingnamespacestd;classBook{intnum,price;public:
Book(inta=0,intb=0){num=a;price=b;}
voidshowMoney(){cout<};
intmain()
{Bookb[]={Book(1,2),Book(3,6),Book(8,9)};
Book*p;inti;
p=&b[2];
for(i=0;i<3;i++,p--)p->showMoney();72system("pause");18return0;}运行结果:
2
4.#include
usingnamespacestd;
intf(int);
intmain()
{inti;
for(i=0;i<5;i++)
cout<cout<return0;}
intf(inti)
{staticintk=1;for(;i>0;i--)k+=i;
returnk;}运行结果:
251121
5.#includeusingnamespacestd;classsample{public:
sample(){cout<<"Constructor"<};voidfn(inti){staticsamplec;cout<<"i="<
{fn(14);Constructorfn(16);14
return0;}运行结果:
16
6.#includeusingnamespacestd;intn=0;int&f(intm){n+=m;returnn;}intmain(){f(5)+=23;cout<<"n="<28
7.#includeusingnamespacestd;intmain(){intnum=327;longp=1;
do
{
p*=num%1;0
num/=10;
}while(num);cout<<"p="<
}运行结果:
p=42
8.#includeusingnamespacestd;intmain()
{inta[10]={1,2,3,4,5,6,7,8,9},*p=a+6;cout<<*(--p)<*(p+4)+=7;cout<
7
9.#include
#includeclasstimer{
public:
timer(){seconds=0;}timer(intt){seconds=t;}
timer(intmin,intsec){seconds=min*60+sec;}
intgettime(){returnseconds;}
private:
intseconds;
};
voidmain()
;seconds=0
;seconds=10
;}运行结果:
seconds=70
{timera,b(10),c(1,10);cout<<"seconds1="<10.#includeusingnamespacestd;classTest{staticintcount;public:
Test(){++count;cout<<"对象数量="<:
count=0;对象数量=1voidmain()对象数量=2
{Testt[3];}运行结果:
对象数量=3
对象数量=2
11.#include对象数量=1#include对象数量=0usingnamespacestd;classmyclass
{public:
myclass(){cout<