1、知识模块五 面向对程序设计基础一、 选择题1. ()不是构造函数的特性。A、构造函数的函数名与类名相同;B、构造函数可以重载;C、构造函数可以设立缺省参数;D、构造函数必须指定类型说明。2. ()是析构函数的特性。A、析构函数可以有一个或多个参数;B、析构函数名与类名不同;C、析构函数的定义只能在类体内;D、一个类中只能定义一个析构函数; 3.要运营一个C语言编写的应用程序如下:main() printf(hello world);在VC6的开发环境中,应当建立哪种类型的工程? A, Win32 ApplicationB, Win32 Console ApplicationC, MFC App
2、Wizard (exe)D, Utility Project4. 关于VC6建立的工程的说法,对的的是: A,工程只能包含.cpp和.h类型的文献B,工作区文献的后缀是.dspC, 用鼠标双击工作区文献可以打开整个工程D,在VC的FileView中可以看到工程中所有的文献,涉及工作区文献,项目文献等5. 在VC6中提供了成员方法的自动列表和方法参数的自动提醒功能,但有时不能正常显示,这是应当删除该工程目录下那种后缀类型的文献后,再次打开工程,就可以正常提醒了。 A, clwB, ncbC, optD, aps6. 有关句柄(handle)的说法,下列不对的的是: A 句柄是一个4字节长的整数值
3、 B 句柄用来标记应用程序中不同的对象或同类对象中的不同实例 C 消息是句柄的一种 D 画笔的句柄类型是HPEN,画刷的句柄类型是HBRUSH7. C+对C语言作了很多改善,下列描述中()使得C语言发生了质变,从面向过程变成了面向对象。 A、增长了一些新的运算符; B、允许函数重载,并允许设立缺省参数; C、规定函数说明必须用原型; D、引进了类和对象的概念;8. 下列描述中,()是错误的。A、内联函数重要解决程序的运营效率问题;B、内联函数的定义必须出现在内联函数第一次被调用之前;C、内联函数中可以涉及各种语句;D、对内联函数不可以进行异常接口声明;9. 在C+中,关于下列设立缺省参数值的描
4、述中,()是对的的。A、不允许设立缺省参数值;B、在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;C、只能在函数的定义性声明中指定参数的缺省值;D、设立缺省参数值时,必须所有都设立;10.()不是构造函数的特性。 A、构造函数的函数名与类名相同; B、构造函数可以重载; C、构造函数可以设立缺省参数; D、构造函数必须指定类型说明。11. 是析构函数的特性。 A、析构函数可以有一个或多个参数; B、析构函数名与类名不同; C、析构函数的定义只能在类体内; D、一个类中只能定义一个析构函数12. C+对C语言作了很多改善,下列描述中()使得C语言发生了质变,从面向过程变成了面向对象。A、
5、增长了一些新的运算符;B、允许函数重载,并允许设立缺省参数;C、规定函数说明必须用原型;D、引进了类和对象的概念;13. 下列描述中,()是错误的。A、内联函数重要解决程序的运营效率问题;B、内联函数的定义必须出现在内联函数第一次被调用之前;C、内联函数中可以涉及各种语句;D、对内联函数不可以进行异常接口声明;14. 在C+中,关于下列设立缺省参数值的描述中,()是对的的。A、不允许设立缺省参数值;B、在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;C、只能在函数的定义性声明中指定参数的缺省值;D、设立缺省参数值时,必须所有都设立; 15. 在进行完任何C+流的操作后,都可以用C+流的
6、有关成员函数检测流的状态;其中只能用于检测输入流 状态的操作函数名称是( )。 A failB eof C bad D good 16. C+语言是从初期的C语言逐渐发展演变而来的。与C语言相比,它在求解问题方法上进行的最大改善是()。 A 面向过程 B 面向对象 C 安全性 D 复用性 17. C+对C语言作了很多改善,即从面向过程变成为面向对象的重要因素是_ A.增长了一些新的运算符 B.允许函数重载,并允许设立缺省参数 C.规定函数说明符必须用原型 D.引进了类和对象的概念18. C+源程序文献的缺省扩展名是_ A. cpp B. exe C. obj D. lik19. 在int a=
7、3,int *p=&a;中,*p的值是_20. 类的析构函数是在_调用的。 A.类创建时B.创建对象时 C.删除对象时 D.不自动调用21. 假定AB为一个类,则执行AB x;语句时将自动调用该类的_A.有参构造函数 B.无参构造函数C.拷贝构造函数 D.赋值构造函数22. 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为: A. AB operator+(AB & a , AB & b) B. AB operator+(AB & a)C. operator+(AB a) D. AB & operator+( )23. 假定AB为一个
8、类,则执行AB x;语句时将自动调用该类的_ A.有参构造函数B.无参构造函数 C.拷贝构造函数D.赋值构造函数) 25. 假定AB为一个类, 则该类的拷贝构造函数的声明语句为_. A. AB&(AB x); B. AB(AB x) C. AB(AB&); D. AB(AB * x) 26. 下列哪项不是面向对象程序设计的重要特性? A.封装 B.继承 C.多态 D结构27. 对象之间的互相作用和通信是通过消息。下列哪项不是消息的组成部分?A接受消息的对象 B要执行的函数的名字 C.要执行的函数的内部结构 D函数需要的参数28. 关于C+与C语言关系的描述中,( )是错误的。A.C语言是C+语
9、言的一个子集 B.C语言与C+语言是兼容的C.C+语言对C语言进行了一些改善 D.C+语言和C语言都是面向对象的29. 已知:类A中一个成员函数说明如下:void Set(A&a); 其中,A&的含义是( )。 A.指向类A的指针为a B将a的地址值赋给变量Set C.a是类A对象的引用,用来作函数Set()的参数D.变量A与a按位与作为函数Set( )的参数30. 已知:print( )函数是一个类的常成员函数,它无返回值,下列表达中,( )是对的的。A.void print( ) const; B.const void print( ); C void const print( ); D.
10、void print(const);31. 假如类A被说明成类B的友元,则_A.类A的成员即类B的成员 B.类B的成员即类A的成员C.类A的成员函数不得访问类B的成员 D.类B不一定是类A的友元32. 假定AB为一个类,则执行AB x;语句时将自动调用该类的_ A.有参构造函数 B.无参构造函数 C.拷贝构造函数 D.赋值构造函33. 下面的函数声明中, _是” void BC(int a, int b);”的重载函数? A. int BC(int a, int b) B. void BC(int a, char b) C. float BC(int a, int b, int c=0) D.
11、 void BC(int a, int b=0) 34. 下面的哪一个保存字不能作为函数的返回类型?_A. void B. int C. new D. long 35. 下列关键字中,用以说明类中公有成员的是( )。 A friend; B private; C protected ;D public 36. 进行文献操作时需要包含( )文献。 A iostream.h ;B stdlib.h ;C stdio.h; D fstream.hC 指向字符串常量的指针; D 指向字符串的指针常量 37. 能用作用户自定义标记符。A friend B-var C)3xyz DFloat38. 面向对
12、象程序设计将数据与 放在一起,做为一个互相依存、不可分割的整体来解决。 A 对数据的操作B 信息C数据隐藏D数据抽象39. 一个类的析构函数 。A唯一的 B允许重载 C至多可有两个 D只能是缺省的40. 下列说法对的的是: 。A一个类的对象可以是另一个类的成员B一个类可以作为另一个类的派生类C一个类定义在另一个类的说明中D以上说法均对的41. 下列各类函数中, 不是类的成员函数。A 构造函数 B析构函数 C 友元函数 D拷贝构造函数42. 有关析构函数的说法不对的的是 。A 析构函数有且只有一个 B 析构函数无任何函数类型 C析构函数和构造函数同样可以有形参D 析构函数的作用是在对象被撤消时收
13、回先前分派的内存空间43. 通常拷贝构造函数的参数是 。A 某个对象名 B 某个对象的成员名 C 某个对象的引用名D 某个对象的指针名44. 已知:类A中一个成员函数说明如下:void Set(A&a); 其中,A&的含义是( )。A.指向类A的指针为a B将a的地址值赋给变量Set Ca是类A对象的引用,用来作函数Set()的参数D.变量A与a按位与作为函数Set( )的参数45. 已知:print( )函数是一个类的常成员函数,它无返回值,下列表达中,( )是对的的。Avoid print( ) const; B.const void print( ); C.void const prin
14、t( ); D.void print(const);46. 类的析构函数是在_调用的。A.类创建时 B.创建对象时C.删除对象时 D.不自动调用47. 假如类A被说明成类B的友元,则_A.类A的成员即类B的成员 B.类B的成员即类A的成员C.类A的成员函数不得访问类B的成员 D.类B不一定是类A的友元二、填空题(1)在用class定义一个类时,数据成员和成员函数的默认访问权限是 。 (2)具有纯虚函数的类称为 。 (3)派生类的重要用途是可以定义其基类中_。(4)当建立_,程序自动调用该类的构造函数。(5)类是用户定义的类型,具有类类型的变量称作_。(6)当一个成员函数被调用时,该成员函数的_
15、指向调用它的对象。(7)拷贝函数通过_使用引用来初始化创建中的对象。(8)静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是 _ 。(9)对象的三大基本特性是多态性、_、封装性。 (10) 当一个类对象离开它的作用域时, 系统将自动调用该类的_.(11)假定AB为一个类, 则执行AB a10; 语句时, 系统自动调用该类构造函数的次数为_.(12)指向基类的对象的指针变量也可以指向 的对象。(13)面向对象程序中,实体的状态由 表达,其行为由 表达。(14)定义_函数时,应在参数个数或参数类型上有所不同。(15)类是用户定义的类型,具有_称作对象。(16)使用指向对象的指针来标记
16、类的成员,则必须使用的运算符是_ 。(17)拷贝初始化构造函数使用_来初始化创建中的对象。 (18) 封装规定一个对象应具有明确的功能,并具有 _ 以便和其它对象互相作用。 (25)在删除一个动态对象时,将自动调用该动态对象所属类的 _ 函数。 三、判断题 (1)在定义一个类时,不能在类说明中对数据成员使用表达式进行初始化。()(2)假如在类声明中没有定义复制构造函数,就不能用一个对象去初始化另一个对象()(3)类的两个基类中都有某个同名成员,在派生类中对这个成员的访问也许出现二义性。(对)(4)在面向对象的程序设计中,凡操作属于同一种对象的,就将这些操作放进该对象类中,形成该类的成员函数。
17、( )(5)说明函数原型时不需要指明每个函数参数的名字,只需要说明每个参数的类型和返回值类型就可以了。( )(6)所有的表达式都有值。 ( )(7)程序的编译是以文献为单位的,因此将程序分到多个文献中可以减少每次对程序修改所带来的编译工作量。( )(8)类的静态数据成员需要在定义每个类的对象时进行初始化。( )四、程序填空(1)在下面程序的横线处填上适当的语句,使该程序执行结果为10. #include “iostream.h”class MyClass public: MyClass(int a)x = a; /取x值 private:int x; ; int main() MyClass
18、my(10); coutmy.getnum()endl; return 0; (2)在下面程序的底画线处填上适当的字句,使该程序执行结果为60。# include class baseint X;publicvoid int (int init X)X=init X; int Getnum() return X+7; void main()_cout(3)在下面程序的底画线处填上适当的字句,完毕类中成员函数的定义。# include class box privateint color;int upx,upy;int lowx,lowy;publicfriend int same_color(
19、line a,box b);_;void define_box(int x1,int y1,int x2,int y2)upx=x1;upy=y1;class line privateint color;int startx,starty;int len;publicfriend_int same_color(line a,box b);_;void define_line(int x,int y)startx=x;int same_color(line a,box b)if(a.color= =b.color)return 1;return 0;(4)在下面程序的底画线处填上适当的字句,完毕
20、程序。# include class A _(int i)coutvoid g()cout”gn”;closs BA publicvoid h()cout”hn”;_;void main() B d1;d1.f(6);d1.h();(5)在下列程序的空格处填上适当的字句,使输出为:0,8,5。# include # include class Magicdouble x;publicMagic(double d=0.00)x(fabs(d)Magic _return Magic(sqrt(x*x+c.x*c.x);_(ostream & os,Magic c)return os;void ma
21、in()Magic ma;cout(6)在下面程序的底画线处填上适当的字句,使该程序执行结果为10。 #include class baseint X; public: _为X置值 _取X值 ; void main() base test; test.init(3); couttest.Getnum(); (7)在下列程序的底画线处填上适当的字句,完毕类中成员函数的定义。 #include class box private: int color;int upx,upy;int lowx,lowy; public: friend int same-color(line a,box b); _
22、set-color(int c)color=c; void define-box(int x1,int y1,int x2,int y2)upx=x1;upy=y1; ; class line private: int color;int startx,starty;int len; public: friend-int same-color(line a,box b); _set-color(int c)color=c;void define-line(int x,int y)startx=x;int same-color(line a,box b)if(a.color= =b.color)
23、 return 1;return 0;(8)在下面程序的底画线处填上适当的字句,完毕程序。 #include class A public: void f(int i)coutiendl; void g()cout”n”; ; class _ public: void h()cout”hn”; Af; ; void main() B d1; d1.f(6); _.h(); (9)在下列程序的空格处填上适当的字句,使输出为:0,7,5。 #include #include class Magic double x; public _(double d=0.00)x(fabs(d) Magic o
24、perator+(Magic c)return Magic(sqrt(x*x+c.x*c.x); friend ostream & operator(ostream & os,Magic c)return osc.x; ; void main() _; coutma,Magic(-7),ma+Magic(3)+Magic(4); (10)在下面程序横线处填上适当字句,以使该程序执行结果为:5432105.54.43.32.21.1#include template void f () ; for (int i=0; in/2; i+) t=ai, ai=an-1-i, an-1-i=t;voi
25、d main () int a5=1,2,3,4,5; double d6=1.1,2.2,3.3,4.4,5.5; f(a,5); f(d,6); for (int i=0; i5;i+) cout ai ; cout endl; for (i=0; i6; i+) cout di ; cout endl;五、程序阅读题 1.分析以下程序执行的结果 #include #include class Sample public: int x,y; Sample()x=y=0; Sample(int a,int b)x=a;y=b; void disp() coutx=x,y=yendl; ; v
26、oid main() Sample s1(2,3); s1.disp(); 2.分析以下程序的执行结果 #include class Sample int x,y; public: Sample()x=y=0; Sample(int a,int b)x=a;y=b; Sample() if(x=y) coutx=yendl; else coutx!=yendl; void disp() coutx=x,y=yendl; ; void main() Sample s1(2,3); s1.disp(); 3.分析以下程序的输出结果 #include class Sample int x; publ
27、ic: Sample(int a) x=a; coutconstructing object:x=xendl; ; void func(int n) static Sample obj(n); void main() func(1); func(10); 4 分析以下程序的执行结果 #include class Sample int x,y; public: Sample()x=y=0; Sample(int a,int b)x=a;y=b; void disp() coutx=x,y=ydisp(); 5 分析以下程序的执行结果 #include class Sample public: i
28、nt x; int y; void disp() coutx=x,y=yendl; ; void main() int Sample:*pc; Sample s; pc=&Sample:x; s.*pc=10; pc=&Sample:y; s.*pc=20; s.disp(); 6 分析以下程序的执行结果 #include class Sample int x,y; public: Sample()x=y=0; Sample(int a,int b)x=a;y=b; void disp() coutx=x,y=yendl; ; void main() Sample s1,s2(2,3); s1
29、.disp(); s2.disp(); 7 分析以下程序执行的结果 #include class Sample int x,y; public: Sample() x=y=0; Sample(int a,int b) x=a;y=b; Sample() if(x=y) coutx=yendl; else coutx!=yendl; void disp() coutx=x,y=yendl; ; void main() Sample s1(2,3); s1.disp(); s1.Sample(); 8 分析以下程序的执行结果 #include class Sample int x,y; publi
30、c: Sample() x=y=0; Sample(int a,int b) x=a;y=b; Sample() if(x=y) coutx=yendl; else coutx!=yendl; void disp() coutx=x,y=yendl; ; void main() Sample s1,s2(2,3); s1.disp(); s2.disp(); 9.分析以下程序的执行结果 #include #include class Sample public: int x,y; Sample()x=y=0; Sample(int a,int b)x=a;y=b; void disp() co
31、utx=x,y=yendl; Sample() if(x=y) coutx=yendl; else coutx!=yendl; ; void main() Sample s1(2,3); s1.disp(); if(s1.x=2) exit(0); 10.分析以下程序的执行结果 #include class Sample int x,y; public: Sample()x=y=0; Sample(int a,int b)x=a,y=b; Sample() if(x=y) coutx=yendl; else coutx!=yendl; void disp() coutx=x,y=yendl;
32、; void main() Sample(2,3); 11.分析以下程序的执行结果 #include class Sample public: Sample(); Sample(int); Sample(); void display(); protected: int x; ; Sample:Sample() x=0; coutconstructing normallyn; Sample:Sample(int m) x=m; coutconstructing with a number:xendl; void Sample:display() coutdisplay a number:xen
33、dl; Sample:Sample() coutdestructingn; void main() Sample obj1; Sample obj2(20); obj1.display(); obj2.display(); 12.分析以下程序的执行结果 #include class Sample int n; static int sum; public: Sample(int x)n=x; void add()sum+=n; void disp() coutn=n,sum=sumendl; ; int Sample:sum=0; / 静态数据成员赋初值 void main() Sample
34、a(2),b(3),c(5); a.add(); a.disp(); b.add(); b.disp(); c.add(); c.disp(); 13.分析以下程序执行的结果 #include class Sample int A; static int B; public: Sample(int a)A=a,B+=a; static void func(Sample s); ; void Sample:func(Sample s) coutA=s.A,B=Bendl; int Sample:B=0; void main() Sample s1(2),s2(5); Sample:func(s1
35、); Sample:func(s2); 14.分析以下程序的执行结果 #include class Sample char c1,c2; public: Sample(char a)c2=(c1=a)-32; void disp() coutc1转换为c2endl; ; void main() Sample a(a),b(b); a.disp(); b.disp(); 15.分析以下程序执行的结果 #include class Sample int x,y; public: Sample()x=y=0; Sample(int a,int b)x=a;y=b; void disp() coutx
36、=x,y=yendl; ; void main() Sample s1,s2(1,2),s3(10,20); Sample *pa3=&s1,&s2,&s3; for(int i=0;idisp(); 16. 分析以下程序的执行结果 #include class Sample int x,y; public: Sample()x=y=0; Sample(int a,int b)x=a,y=b; void disp() coutx=x,y=yendl; ; void main() Sample s1,s2(1,2),s3(10,20); Sample *Pa3; Pa0=&s1; Pa1=&s2; Pa2=&s3; for(int i=0;idisp(); 17. 分析以下程序的执行结果 #include class Sample public: int x; int y; void disp() coutx=x,y=y*pc=10; pc=&Sample:y; p-*pc=20; p-disp(); 18.分析以下程序的执行结果 #include class Sample int x; int y; public: Sample(int a,int b) x=a;y=b;