C++程序设计面向对象习题.doc

上传人:文库蛋蛋多 文档编号:2384412 上传时间:2023-02-17 格式:DOC 页数:31 大小:88.50KB
返回 下载 相关 举报
C++程序设计面向对象习题.doc_第1页
第1页 / 共31页
C++程序设计面向对象习题.doc_第2页
第2页 / 共31页
C++程序设计面向对象习题.doc_第3页
第3页 / 共31页
C++程序设计面向对象习题.doc_第4页
第4页 / 共31页
C++程序设计面向对象习题.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《C++程序设计面向对象习题.doc》由会员分享,可在线阅读,更多相关《C++程序设计面向对象习题.doc(31页珍藏版)》请在三一办公上搜索。

1、Visual C+ 程序设计基础练习题第二部分 面向对象的程序设计南通大学计算机科学与技术学院2006年3月一、复习并回答下列问题:1. 什么是类,类的定义格式如何?类中成员的访问权限有哪些?2. 类中的数据成员和成员函数有何区别?对成员函数的定义有何规定?3. 什么是对象?对象的定义格式如何?对象成员如何表示?指向对象指针的成员如何表示?4. 构造函数的功能和特点有哪些?析构函数的功能和特点又有哪些?默认构造函数和默认析构函数有何特点?5. 拷贝构造函数的功能和特点是什么?默认拷贝构造函数有何用处?6. 成员函数具有哪些特征?7. 静态数据成员如何定义?如何引用?它有何特点?静态成员函数有何

2、特点?8. 友元函数如何定义?它有什么特点?友元类如何定义?它又有何特点?9. 类的作用域是什么?按生存期如何划分对象?10.什么局部类?11.什么是指向对象的指针?什么是对象的引用?它们如何被定义?它们的主要功能是什么?12.什么是对象数组?什么是对象数组指针?它们是如何定义的?13.this指针的含义是什么?为什么在程序中很少见到?14.指向一维对象数组的指针是如何定义的?它的功能是什么?15.什么是对象指针数组?它是如何被定义的?16.如何使用const来说明指针常量?使用const说明常量时应注意些什么?17.如何说明const成员函数?const成员函数有何特点?18.const数据

3、成员如何初始化?19.什么是对象成员?如何对对象成员进行初始化?20.使用new运算符创建对象时和创建对象数组时有何不同?21.什么是转换函数?如何定义一个转换函数?转换函数有何功能?22.什么是继承性?为什么说它是面向对象语言中的重要机制?23.C+语言中继承分为哪两类?继承方式又分为哪三种?三种不同继承方式有何特点?24.不同继承方式中,说明下列各种情况对于基类成员访问有何不同? A) 派生类 B) 派生类的对象 C) 派生类的派生类25.如何定义单继承的派生类?如何定义多继承的派生类?26.派生类与基类之间有什么关系?27.单继承中, 派生类的构造函数如何定义?28.多继承中, 派生类的

4、构造函数如何定义?29.什么是子类型?它有何作用?30.多继承中那些情况下会出现二义性?如何消除?31.为什么要引入虚基类?带有虚基类的派生类构造函数有什么特点?32.什么是多态性?为什么说多态性是继承性的补充?33.什么是函数重载?定义重载函数时应注意哪些问题?34.什么是运算符重载?是否所有的运算符都能重载?35.运算符重载的定义格式如何?运算符重载有几种形式?36.运算符被重载后与原运算符有何关系?37.什么是编译时多态性和运行时多态性?38.什么是虚函数?如何说明虚函数?是否所有的成员函数都可以说明为虚函数?39.什么是纯虚函数?什么是抽象类?40.虚析构函数有何功能?41.总结c+语

5、言的多态性包含哪些内容?42.在C+的输入输出操作中,如何理解流的概念?从流的角度说明什么是提取操作?什么是插入操作?43.系统预定的流类对象中,cin和cout的功能是什么?44.从键盘上输入一个字符有哪些方法?输入一个字符串有哪些方法?45.向屏幕上输出一个字符有哪些方法?输出一个字符串有哪些方法?46.如何将一个int型的数按不同进制形式输出?47.如何输出一个指定精度的浮点数?48.如何确定输出数据项的宽度?49.打开和关闭一个磁盘文件有哪些方法?50.读写磁盘文件中信息有哪些方法?51.如何对文件进行随机存取操作?二、填空1. 关于类定义格式的描述中,D是错的。 A)一般类的定义格式

6、分为说明部分和实现部分 B)一般类中包含有数据成员和函数成员 C)类中成员可设置以下访问方式之一:public,private,protected D)函数成员都应是公有的、数据成员都应是私有的2. 下列关键字中,C不是类定义中使用的关键字。 A)class B)public C)switch D)private3.下列叙述中,不正确的是B。 A)类的构造函数可以重载 B)类的析构函数可以重载 C)一个类可以不定义构造函数 D)一个类可以不定义析构函数4. 关于类中成员函数的描述中,B是错的。 A)类中可以说明一个或多个成员函数 B)类中的成员函数只能定义在类体外 C)定义在类体外的成员函数前

7、加inline可以成为内联函数 D)在类体外定义成员函数时,在函数名前除了加类型说明符外,还需用作用域运算符限定该成员函数所属的类5. 关于对象的描述中,A是错的。 A)同一个类创建的若干个对象的数据结构和其内容都是不相同的 B)对象的成员表示与C语言中结构变量的成员表示相同 C)一个类可以定义多个对象、指向对象的指针和对象数组 D)一个对象在定义时就被初始化6. 下列是构造函数的特点,C是错的。 A)构造函数是一种成员函数,它具有一般成员函数的特点 B)构造函数的名称与其类名相同 C)构造函数必须指明其类型 D)一个类中可定义1个或多个构造函数7. 下列是析构函数的特点,A是错的。 A)析构

8、函数的名字不能与类名相同,否则将与构造函数无法区别 B)析构函数中不可以有参数 C)析构函数定义时不必指出类型 D)析构函数也是一种成员函数8. 拷贝构造函数具有的下列特点中,C是错的。 A)如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的 B)拷贝构造函数只有一个参数,并且是该类对象的引用 C)拷贝构造函数的名字不能用类名 D)拷贝构造函数是一种成员函数9. 下列关于类成员函数的特性中,B是错的。 A)除析构函数外,成员函数都可以重载 B)成员函数都是内联的 C)除析构函数外,成员函数都可以设置默认参数 D)成员函数可以是公有的,也可以是私有的10.关于静态成员的描述中,B是错的

9、。 A)静态成员可以分为静态数据成员和静态函数成员 B)静态数据成员定义后必须在类体内进行初始化 C)静态数据成员初始化不使用其构造函数 D)静态函数成员中不能直接引用非静态成员11.关于友元的描述中,A是错的。 A)友元函数是成员函数,它被说明在类体内 B)友元函数可直接访问类中的私有成员 C)友元函数破坏类的封装性,使用时应少用 D)友元类中的所有成员函数都是友元函数12.已知:类A中的一个成员函数说明为void Set(A&a);其中,A&a的含义是B。 A)变量A与变量a按位与作为函数Set()的实参 B)类A的对象引用a作为函数 Set()的参数 C)指向类A的指针a作函数Set()

10、的参数 D)将类A的对象a的地址值赋给变量Set13.下列关于对象数组的描述中,A是错误的。 A)对于对象数组只能赋初值而不能赋值 B)对象数组的下标是从0开始的 C)对象数组的每个元素都是相同类的对象 D)对象数组的数组名是一个常量指针14.下列关于指向类的一维对象数组的指针p的定义中,B是正确的。 A)A p5 B)A (*p)5 C)(A*)p5 D)A*p15.已知:const char*ptr;那么ptr应该是A。 A)指向字符串常量的指针 B)指向字符串的常量指针 C)指向字符的常量的指针 D)指向字符常量的指针16.已知:Print()函数是一个类的const成员函数,它无返回值

11、,也无参数。下列关于Print()函数的各种说明中,A是正确的。 A)void Print() const; B)void const Print(); C)const void Print(); D)void Print(const);17.下列关于对象成员的描述中,D是错误的。 A)对象成员是类的一种数据成员,它是另一个类的对象 B)对象成员不可以是自身类的对象 C)对对象成员的初始化要包含在该类的构造函数中 D)一个类中只能含有一个对象成员作其成员18.对new运算符的下列描述中,B是错误的。 A)它可以动态创建对象和对象数组 B)用它创建对象数组时必须指定初始值 C)用它创建对象时要调

12、用构造函数 D)用它创建的对象可以使用运算符delete来释放19.对delete运算符的下列描述中,D是错误的。 A)用它可以释放用new运算符创建的对象和对象数组 B)用它释放一个对象时,它作用于一个new所返回的指针 C)用它释放一个对象数组时,它作用的指针名前须加下标运算符() D)它不适用于空指针20.下列对类型转换函数的描述中,D是错误的。 A)类型转换函数是一种非静态的成员函数 B)类型转换函数是无参数的 C)类型转换函数不能被定义为友元函数 D)类型转换函数必须在定义时指出返回值类型21.下列对派生类的描述中,C是错误的。 A) 一个派生类可以作为另一个派生类的基类 B) 派生

13、类至少应有一个基类 C) 基类中成员访问权限继承到派生类中都保持不变 D) 派生类的成员除了自己定义的成员外,还包含了它的基类成员22.派生类的对象对它的哪一类基类成员是可以访问的?A A) 公有继承的基类的公有成员 B) 公有继承的基类的保护成员 C) 公有继承的基类的私有成员 D) 保护继承的基类的公有成员23.关于多继承二义性的描述,D是错误的。 A) 派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出 现二义性 B) 一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对 该公共基类的访问可能出现二义性 C) 解决二义性最常用的方法是使作用域运算符对成员进行限定 D)

14、派生类和它的基类中出现同名函数时,将可能出现二义性24.多继承派生类构造函数构造对象时,B被最先调用。 A) 派生类自己的构造函数 B) 虚基类的构造函数 C) 非虚基类的构造函数 D) 派生类中子对象类的构造函数25.定义重载函数的下列条件中,C是错误的。 A)要求参数个数不同 B)要求参数类型不同 C)要求函数返回值类型不同 D)要求在参数个数相同时,参数类型不同26.下列函数中,D不能重载。 A)成员函数 B)非成员函数 C)构造函数 D)析构函数27.下列运算符中,A不能重载。 A): B) C)& D)new28.下列有关运算符重载的描述中,B是正确的。 A)运算符的重载可改变其优先

15、级 B)运算符的重载不可改变其语法结构 C)运算符的重载可改变其结合性 D)运算符的重载可改变其操作数的个数29.下列关于动态联编的描述中,A是错误的。 A)运行时多态性是在编译时确定操作函数的 B)运行时多态性是以虚函数为基础的 C)运行时多态性是在继承的前提下的一种多态性 D)运行时多态性要求类的继承是公有的30.下列关于虚函数的描述中,C是正确的。 A)虚函数是static存储类的成员函数 B)虚函数是一个非成员函数 C)基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数 D)派生类的虚函数与基类的虚函数应具有不同的类型和个数31.关于纯虚函数和抽象类的描述中,B,C是错误的

16、。 A)纯虚函数是一种特殊的虚函数,它没有具体体现 B)抽象类中一定具有一个或多个纯虚函数 C)抽象类的派生类中一定不会再有纯虚函数 D)抽象类一般作为基类使用,其纯虚函数的实现由其派生类给出32.下列叙述中,不正确的是C。 A)含纯虚函数的类称为抽象类 B)不能直接由抽象类建立对象 C)抽象类不能作为派生类和基类 D)纯虚函数不能定义其实现部分33.下列各种类中,A不能说明对象。 A)抽象类 B)派生类 C)嵌套类 D)局部类34.进行文件操作时应包含B文件。 A)math.h B)fstream.h C)string.h D)ctype.h35.使用控制符进行格式输出时,应包括C文件。 A

17、)stream.h B)math.h C)iomanip.h D)strstrea.h36.已知:int a,*p=&a; 输出指针p所存放的十进制地址的方法是D。 A)coutp; B)cout*p C)cout&p; D)coutlong(p);37.下列输出字符A的方法中,B是错的。 A)coutA; B)coutput(A) C)cout.put(A); D)char a=A; couta;38.关于对getline()函数的下列描述中,A是错误的。 A)该函数所使用的终止符只能是换行符。 B)该函数是从键盘上读取字符串的。 C)该函数所读取的字符串的长度是受限制的。 D)该函数读取字

18、符串时遇到终止符便停止。39.关于read()函数的下述描述中,C是对的。 A)该函数只能从键盘输入中获取字符串。 B)该函数只能用于文本文件的操作。 C)该函数只能按规定读取指定数目的字符。 D)该函数读取的字符串只能直接显示在屏幕上。40.在ios类中提供的控制格式标志位中,A是转换为十六进制形式的标志位。 A)hex B)oct C)dec D)right41.输出格式的控制符中,D是设置输出宽度的。 A)ws B)ends C)setfill() D)setw()42.在打开磁盘文件的访问方式常量中,C是以追加方式打开文件的。 A)in B)out C)app D)ate43.下列函数

19、中,D是对文件进行写操作的。 A)get() B)read() C)getline() D)put()44.下列叙述中,不正确的是C。 A)this指针是指向当前调用成员函数的对象的指针 B)this指针能用于数据成员和函数成员中 C)this指针破坏了类的封装性 D)this指针的类型与所指对象的类型相同45.以下说法不正确的是C。 A)运算符重载本质上就是函数重载 B)函数重载是多态性的体现 C)运算符重载只能通过类成员函数实现 D)重载后的运算符,其用法与该运算符的原始定义完全一样46.若有以下程序说明和语句: void fn(int s) void fn(int&t) void mai

20、n() int a=5; fn(2); /L1 fn(a); /L2 则下述说法正确的是C。 A)编译器编译L1行语句时,无法确定调用哪一个重载函数 B)重载函数fn的定义非法 C)编译器编译L2行语句时,无法确定调用哪一个重载函数 D)以上说法都不正确47.若有以下说明和语句: #include class Q int x,y; public: Q(int a=0,int b=0) x=a;y=b; Q() ; void main() Q q0; /L0 Q q1(1); /L1 Q q2(1,2); /L2 则以下说法正确的是A。 A)编译器编译L0行语句时,无法确定调用哪一个构造函数 B

21、)编译器编译L1行语句时,无法确定调用哪一个构造函数 C)编译器编译L2行语句时,无法确定调用哪一个构造函数 D)以上程序正确48.若有以下说明和语句: #include class Q int x,y; public: Q(int a=0,int b=0) x=a;y=b; ; void main() Q q0; /L0 Q q1(q0); /L1 Q q2=q0; /L2 则以下说法正确的是D。 A)编译器编译L0行语句时,无法确定调用哪一个构造函数 B)编译器编译L1行语句时,无法确定调用哪一个构造函数 C)编译器编译L2行语句时,无法确定调用哪一个构造函数 D)以上程序正确49.若有以

22、下说明和语句: #include class Q int x,y; public: Q(int a=0,int b=0) x=a;y=b; ; void main() Q q(); /L 则以下说法正确的是B。 A)L行说明了一个对象q B)L行说明了一个函数原型 C)L行说明了一个对象数组 D)以上说法都不正确50.以下程序输出的两个字母分别为c和d。 #include class X public:virtual void f() coutabendl; ; class Y:public X public: void f() coutcdf(); 51.以下程序的输出结果分别是20和30。

23、 #include class Base protected: intx; public: Base(int a) x=a; ; class A:public Base public:A(int a):Base(a) int GetX() return x; ; class B:public Base public:B(int a):Base(a) int GetX() return x; ; class C:public B,public A public:C(int a):A(a+10),B(a+20) ; void main() C c(10); coutc.A:GetX()endl;

24、coutc.B:GetX()endl; 52.以下程序的运行结果为50,0 退出主函数!调用析构函数!。 #include class Q int x,y; public: Q(int a=0,int b=0) x=a;y=b; void P() coutx,yendl; Q() cout调用析构函数!n; ; void main() Q q(50); q.P(); cout退出主函数!n; 53.以下程序的运行结果为B #include class A int x; public: A(int a) x=a; coutcall A(int)n; A( ) cout call A()n; ;

25、class B:public A int y; public: B(int a,int b) y=a; coutcall B(int,int)n; ; void main() B b1(2,3); A)call A(int) B)call A( ) C)call B(int,int) D)call A(int) call B(int,int) call B(int,int)54.以下程序的运行结果为B #include class A int x; public: A(int a=0) x=a;coutx,; ; class B int y; public: B(int a=0) y=a;co

26、uty,; ; class C:public A,public B int z; public: C(int a=0,int b=0):B(a+20),A(a) z=b;coutzn; ; void main() C c(100,200); A)120,100,200 B)100,120,200 C)200,100,120 D)200,120,10055.以下程序的运行结果为B #include class A int x; public: A(int a=0) x=a;coutx,; ; class B int y; public: B(int a=0) y=a;couty,; ; clas

27、s C: public B,virtual public A int z; public: C(int a=0,int b=0):B(a+20),A(a) z=b; coutz)可以输入各种变量的值,但不能输入地址值。(39)使用插入符()可以输出各种变量的值,但不能输出地址值。(40)预定义的提取符和插入符都是可以重载的。(41)函数write()是用来将一个字符串送到一种输出流中,但是它只能将一个字符串中全部字符送到输出流中。(42)控制当前格式化状态的标志字中,每一位标志一种格式。这种格式既可以被设置也可以被清除。(43)控制符本身可以是一种对象,它可以直接被提取符或插入符操作。(44)

28、使用打开文件函数前应先定义一个流对象,然后使用open()函数来操作该对象。(45)read()和write()函数可以读写文本文件,也可以读写二进制文件。(46)以app方式打开文件时,当前的读指针和写指针都定位于文件尾。(47)C+的I/O流库中所提供的读写函数对标准流和一般流都是相同的。四、分析下列程序的输出结果。(1)#include class A int a1,a2; public: A() 1=a2=0; coutDefault constructor called.n; A(int i,int j) a1=i; a2=j; coutConstructor called.n; v

29、oid print() couta1=a1,a2=a2endl; ; void main() A x,y(3,9); x.print(); y.print(); 参考答案: Default constructor called. Constructor called. a1=0,a2=0 a1=3,a2=9(2)#include class B int b1,b2; public: B() B(int i,int j) b1=i; b2=j; void printB( ) coutb1=b1,b2=b2endl; ; class A int a; B c; public: A() A(int

30、i,int j,int k):c(i,j),a(k) void printA() c.printB(); couta=aendl; ; void main() A x(12,65,100); x.printA(); 参考答案: b1=12,b2=65 a=100(3)#include class C static int c;public: C() cout+cendl; static int Getc() return c; C() coutc-endl; ; int C:c=0; void main() C c1,c2,c3,c4,c5; coutC:Getc()endl; 参考答案: 1

31、 2 3 4 5 5 5 4 3 2 1(4)#include class M int m1,m2; public: M(int i,int j) m1=i; m2=j; void Sum(M a,M b) m1=a.m1+b.m1; m2=a.m2+b.m2; void print() coutm1=m1,m2=m2endl; ; void main() M a(34,78),b(a),c(a); c.Sum(a,b); c.print(); 参考答案: m1=68,m2=156(5)#include class Set int elems100,PC; public: Set() PC=0

32、; Set(Set&s); void Empty() PC=0; int IsEmpty() return PC=0; int IsMemberOf(int n); int Add(int n); void Print(); friend void reverse(Set*m); ; int Set:IsMemberOf(int n) for(int i=0;i=100) return 0; else elemsPC+=n; return 1; Set:Set(Set&p) PC=p.PC; for(int i=0;iPC;i+) elemsi=p.elemsi; void Set:Print

33、() cout; for(int i=0;iPC-1;i+) coutelemsi0) coutelemsPC-1; coutPC/2; for(int i=0;ielemsi; m-elemsi=m-elemsm-PC-i-1; m-elemsm-PC-i-1=temp; void main() Set A; coutA.IsEmpty()endl; A.Print(); Set B; for(int i=0;i10;i+) B.Add(i); B.Print(); coutB.IsMemberOf(5)endl; coutB.IsEmpty()endl; for(i=11;i=25;i+)

34、 B.Add(i); Set C(B); C.Print(); reverse(&C); C.Print(); 参考答案: 1 0,1,2,3,4,5,6,7,8,9 1 0 0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,9,8,7,6,5,4,3,2,1,0(6)#include class A int a,b; public: A() a=b=0; coutDefault constructor called.n; A(int i,int j) a=i;b=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号