1、OOP 技术:面向对象程序设计期末复习指导面向对象程序设计课程系中央电大开放教育本科计算机科学与技术专业统设必修课程,本课程的期末复习以中央电大下发的资料和网上复习指导为准。为了加强期末复习,下面市电大给出一套综合练习题,仅作参考。综合练习题一、单选题1、 C+源程序文件的默认扩展名为( )。A:cpp B:exe C:obj D:lik2、 用 new 运算符创建一个含 10 个元素的一维整型数组的正确语句是( )。A: int *p=new a10;B: int *p=new float10;C: int *p=new int10;D: int *p=new int10=1,2,3,4,5
2、3、 假定有“struct BOOKchar title40; float price; BOOK *book=new BOOK;”,则正确的语句为( ) 。A: strcpy(*book)-title,”Wang Tao”);B: strcpy(*book.title,”Wang Tao”);C: strcpy(book-title,”Wang Tao”);D: strcpy(book.title,”Wang Tao”);4、 假定指针变量 p 定义为“int *p=new int30;” ,要释放 p 所指向的动态内存,应使用语句( ) 。A: delete p;B: delete *p;
3、C: delete D: delete p;5、 关于消息,下列说法中不正确的是( ) 。A: 发送消息的对象请求服务,接受消息的对象提供服务B: 消息的发送者必须了解消息的接收者如何相应消息C: 在 C+中,消息的发送具体体现为对接收消息的对象的某个函数的调用D: 每个对象只能接收某些特定格式的消息6、 对于任一个类,用户所能定义的析构函数的个数至多为( )。A: 0 B: 1 C: 2 D: 任意个7、 do 语句能够改写为( )语句。A: 复合 B: if C: switch D: while8、 假定 AA 为一个类,a 为该类公有的数据成员,x 为该类的一个对象,则访问 x 对象中数
4、据成员 a 的格式为( ) 。A: x(a) B: xa C: x-a D: x.a9、 假定 AA 为一个类,a 为该类私有的数据成员,GetValue()为该类公有函数成员,它返回 a 的值,x 为该类的一个对象,则访问 x 对象中数据成员 a 的格式为( ) 。A: x.a B: x.a() C: x-GetValue() D: x.GetValue()10、 假定 AB 为一个类,则( )为该类的拷贝构造函数的原型说明。A: AB(AB x); B: AB(AB C: void AB(AB D: AB(int x);11、 关于运算符重载,下列说法正确的是( ) 。A: 重载时,运算符
5、的优先级可以改变。B: 重载时,运算符的结合性可以改变。C: 重载时,运算符的功能可以改变。D: 重载时,运算符的操作数个数可以改变。12、 下列对派生类的描述中错误的说法是:( ) 。A: 派生类至少有一个基类B: 派生类可作为另一个派生类的基类C: 派生类除了包含它直接定义的成员外,还包含其基类的成员D: 派生类所继承的基类成员的访问权限保持不变13、 C+程序的基本模块为( ) 。A: 语句 B: 函数 C: 表达式 D: 标识符14、 以下叙述中不正确的是( ) 。A: 在一个函数中,可以有多条 return 语句B: 函数的定义不能嵌套,但函数的调用可以嵌套C: 函数必须有返回值D:
6、 不同的函数中可以使用相同名字的变量15、 文件包含命令中被包含的文件的扩展名( ) 。A: 必须是.h B: 不能是.h C: 可以是.h 或.cpp D: 必须是.cpp16、 软件产品可被全部或部分地再用于新的应用的能力叫做软件的( ) 。A: 可维护性 B: 可复用性 C: 兼容性 D: 正确性17、 假定一个类的构造函数为 “A(int aa, int bb) a=aa; b=aa*bb;”,则执行 “A x(4,5);”语句后, x.a 和 x.b 的值分别为( )。A: 4 和 5 B: 5 和 4 C: 4 和 20 D: 20 和 518、 派生类的对象对其基类中( )可直接
7、访问。A: 公有继承的公有成员B: 公有继承的私有成员C: 公有继承的保护成员D: 私有继承的公有成员19、 程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用( )符号作为分隔符。A: 空格或逗号 B: 逗号或回车C: 逗号或分号 D: 空格或回车20、 假定有定义“int b10; int *pb;” ,则不正确的赋值语句为( ) 。A: pb=b5; B: *pb=new int;C: pb= D: pb=b;21、 假定变量 a 和 pa 定义为“double a10, *pa=a;” ,要将 12.35 赋值给 a 中的下标为 5 的元素,不正确的语句是( ) 。A: pa5
8、=12.35; B: a5=12.35;C: *(pa+5)=12.35; D: *(a0+5)=12.35;22、 关于面向对象系统分析,下列说法中不正确的是( ) 。A: 术语“面向对象分析”可以用缩写 OOA 表示B: 面向对象分析阶段对问题域的描述比实现阶段更详细C: 面向对象分析包括问题域分析和应用分析两个步骤D: 面向对象分析需要识别对象的内部和外部特征23、 在 C+程序中使用的 cin 标识符是系统类库中定义的( )类中的一个对象。A: istream B: ostreamC: iostream D: fstream24、 假定 AB 为一个类,则执行 “AB *px=new
9、ABn;”语句时将( )。A: 动态分配一个数组B: 动态分配一个对象C: 静态分配一个数组D: 静态分配一个对象25、在下面循环语句中循环体执行的次数为( ) 。int i=0,s=0; while(svoid f4(int a, int n, intfor(int i=0; ivoid main() int a10=76,83,54,62,40,75,90,92,77,84;int b4=60,70,90,101;int c4=0;for(int i=0;i=bj) j+;cj+;for(i=0;iclass A int *a;public:A(int x=0):a(new int(x)A
10、() delete a;int getA() return *a;void setA(int x) *a=x;void main() A x1,x2(3);A *p=p-setA(x2.getA()+5);x1.setA(15+x1.getA();cout#include class Point int x,y;public:Point(int x1=0, int y1=0) :x(x1), y(y1) coutint a=5;void main() int b=a+20;int a=10;coutint f1(int x, int y)x=x+y; y=x+y;coutclass Franc
11、tion /定义分数类int nume; /定义分子int deno; /定义分母public:/把*this 化简为最简分数,具体定义在另外文件中实现void FranSimp(); /返回两个分数*this 和 x 之和,具体定义在另外文件中实现Franction FranAdd(const Franction/置分数的分子和分母分别 0 和 1void InitFranction() nume=0; deno=1;/置分数的分子和分母分别 n 和 dvoid InitFranction(int n, int d) nume=n; deno=d;/输出一个分数void FranOutput
12、() coutclass Point int x,y;public:Point(int x1=0, int y1=0) :x(x1), y(y1) coutconst int M=20;void main()int c2,c3,c5;c2=c3=c5=0;for(int i=1; iconst int B=2;void main()int p=1,s=1;while(svoid main()char s35=“1234“,“abcd“,“+-*/“; char *p3; for(int I=0;I=0;I-) cout#include class CD char* a;int b;public
13、:void Init(char* aa, int bb)a=new charstrlen(aa)+1;strcpy(a,aa);b=bb;char* Geta() return a;int Getb() return b;void Output() coutclass Datepublic:Date(int y=2001,int m=1,int d=1)Year=y; Month=m; Day=d;void PrintDate() coutclass Basepublic:Base (int i,int j) x0=i; y0=j;void Move(int x,int y) x0+=x; y
14、0+=y;void Show() coutconst int N=5;void main()int i,p=1,s=0;for(i=1;iconst int N=5;void fun();void main()for(int i=1; iclass A int a10; int n;public:A(int aa, int nn): n(nn) for(int i=0; ims) coutms) cout=5 while(i0) a=rand()%90+10;int j, k=int(sqrt(a)+1e-5); /sqrt(x)为求 x 的平方根函数for(j=2; jk) coutclas
15、s Franction /定义分数类int nume; /定义分子int deno; /定义分母public:/把*this 化简为最简分数,具体定义在另外文件中实现void FranSimp(); /返回两个分数*this 和 x 之和,具体定义在另外文件中实现Franction FranAdd(const Franction/置分数的分子和分母分别 0 和 1void InitFranction() nume=0; deno=1;/置分数的分子和分母分别 n 和 dvoid InitFranction(int n, int d) nume=n; deno=d;/输出一个分数void Fra
16、nOutput() coutInitFranction(6,15); /5 行b.InitFranction(3,4); /6 行Franction c; /7 行c.InitFranction(); /8 行c=a.FranAdd(b); /9 行coutx)t=x;x=y;y=t;int Variance()return x*x-y*y; /其它函数从略;void main() A_class A_obj(3,5);coutdata=x; /3 行p-next=NULL; /4 行if(list=NULL) return p; /5 行NODE *p1=list; /6 行while(p1
17、-next!=NULL) p1=p1-next; /7 行p1=p; /8 行return list;错误行的行号为_和_。分别改正为_和_。18、 求出从键盘上输入的 10 个整数中的最大值,要求输入变量用 x 表示,存储最大值的变量用 max 表示。19、 指出程序或函数的功能(每小题 6 分)#includevoid main()int i,s=0;for(i=2;iclass AA int a10;int n;public:void SetA(int aa, int nn); /用数组 aa 初始化数据成员 a,/用 nn 初始化数据成员 nint MaxA(); /从数组 a 中前
18、n 个元素中查找最大值void SortA(); /采用选择排序的方法对数组 a 中前 n 个元素/进行从小到大排序void InsertA();/采用插入排序的方法对数组 a 中前 n 个元素进行从小到大排序void PrintA(); /依次输出数组 a 中的前 n 个元素;void _(1)_ /插入排序函数int i,j;for(i=1; i=0; j-)if(xaj) _(2)_;else _(3)_;aj+1=x;13、 对于类中定义的任何成员,其隐含访问权限为_。14、 在一个用链表实现的队列类中,假定每个结点包含的值域用 elem 表示,包含的指针域用 next 表示,链队的队
19、首指针用 elemHead 表示,队尾指针用 elemTail 表示,当链队非空时,新插入结点的地址应当赋给_所指结点的 next 域。15、 假定用户没有给一个名为 AB 的类定义构造函数,则系统为其定义的构造函数为_。16、 在下面一段类的定义中,自行车类的虚基类为车辆类,机动车类的虚基类也为车辆类,摩托车类的基类为自行车类和机动车类,类之间均为公有继承。class vehicle /车辆类private:int MaxSpeed; /最大车速int Weight; /车重public:vehicle()MaxSpeed=0; Weight=0;virtual void Run() cou
20、t“A vehicle is running!“endl;class bicycle : _(1)_ /自行车类 private:int Height; /车高public:bicycle();void Run() cout“A bicycle is running!“endl;class motorcar : _(2)_ /机动车类 private:int SeatNum; /乘人数public:motorcar();void Run() cout “A motorcar is running!“ endl; ;class motorcycle: _(3)_ /摩托车类 public:mot
21、orcycle ();void Run() cout“A motorcycle is running!“endl;17、 当定义一个结构体变量时,系统分配给该变量的内存大小等于各成员所需内存大小的_。18、 执行 int *p=new int10操作,使 p 指向动态分配的数组中下标为 0 的元素,该元素可表示为_或_。19、 复杂对象可以由简单对象构成,这种现象称为_。20、 假定 AA 是一个类, “AA* abc();”是该类中一个成员函数的原型,则在类外定义时的函数头为_。21、 行尾使用注释的开始标记符为_。22、 float 和 double 类型的数据分别占用_和_个字节。23、
22、 假定 p 是一个指向整数对象的指针,则用_表示该整数对象,用_表示指针变量 p 的地址。24、 在下面一段类定义中, Derived 类公有继承了基类 Base。需要填充的函数由注释内容给出了功能。class Baseprivate:int mem1,mem2; /基类的数据成员public:Base(int m1,int m2) mem1=m1; mem2=m2;void output()coutmem1 mem2 ;/.;class Derived: public Baseprivate:int mem3; /派生类本身的数据成员public:/构造函数,由 m1 和 m2 分别初始化 mem1 和 mem2,由 m3 初始化 mem3Derived(int m1,int m2, int m3); /输出 mem1,mem2 和 mem3 数据成员的值void output() _(1)_; coutmem3endl;/.;Derived:Derived(int m1,int m2, int m3): _(2)_ _(3)_;