《C++面向对象程序设计》_第1页
《C++面向对象程序设计》_第2页
《C++面向对象程序设计》_第3页
《C++面向对象程序设计》_第4页
《C++面向对象程序设计》_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+面向对象程序设计一、选择题(每小题2分,共20分)1一个C+类( )。A. 只能有一个构造函数和一个析构函数 B. 可以有一个构造函数和多个析构函数C. 可以有多个构造函数和一个析构函数D. 可以有多个构造函数和多个析构函数2. 关于类概念的描述中,( )是错误的。A类是抽象数据类型的实现; B类是具有共同行为的若干对象的统一描述体;C类是创建对象的样板; D类不是C+中的一种数据类型;3. 下述静态数据成员的特征中,( )是错误的。A说明静态数据成员时前边要加修饰符static;B.静态数据成员要在类外进行初始化;C引用静态数据成员时,要在静态数据成员名前加和作用域运算符;D静态数据成员

2、不是所有对象所共用的。4下面有关重载函数的说法中正确的是( ) A重载函数必须具有不同的返回值类型;B重载函数形参个数必须不同; C重载函数必须有不同的形参列表D重载函数名可以不同; 5下列各类函数中,( )不是类的成员函数A构造函数 B. 析构函数 C. 友元函数 D. 复制构造函数6下面描述中,表达错误的是( ) A公有继承时基类中的public成员在派生类中仍是public的 B公有继承是基类中的private成员在派生类中仍是private的 C公有继承时基类中的protected成员在派生类中仍是protected的 D私有继承时基类中的public成员在派生类中是private的

3、7. 在C+中,关于下列设置参数默认的描述中,( )是正确的。A.不允许设置参数的默认值;B.设置参数默认值只能在定义函数时设置;C.设置参数默认值时,应该是先设置右边的再设置左边的;D.设置参数默认值时,应该全部参数都设置;8. 下列存储类标识符中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用( )合适。A. 内联函数 B. 重载函数 C. 递归调用 D. 嵌套调用9. 下列( )是引用调用。A形参是指针,实参是地址值; B形参和实参都是变量;C形参是数组名,实参是数组名; D形参是引用,实参是变量。10有如下程序: include classBASE charc; pu

4、blic: BASE(charn):c(n) virtualBASE()coutc; ; classDERIVED:publicBASE charc; public: DERIVED(charn):BASE(n+1),c(n) DERIVED()coutc; ; intmain() DERIVED(X); return0; 执行上面的程序将输出( )。 AXY B.YX CX DY 二、判断题(每小题2分,共10分)1数组赋初值时,初始值表中的数据项的数目可以大于或等于数组元素的个数。( )2类中所提供的成员函数可以直接访问该类的私有成员。()3某类的友元类中的所有成员函数可以存取或修改该类中

5、的私有成员。( )4私有继承中,基类中所有成员对派生类的对象都是不可见的。()5对象数组的元素可以是不同类的对象。( )6多继承情况下,派生类的构造函数的执行顺序并不取决于定义派生类时所指定的各基类的顺序。( )7返回值类型、参数个数和类型都相同的函数也可以重载。( )8C+中使用了新的注释符(/),C语言中注释符(/*/)不能在C+中使用。( )9友元函数是类的成员函数,所以可以存取或修改该类中的私有成员。( )10在一个被调用函数中,一个return语句不可返回多个值给调用函数。()三、填空题(每空1分,共10分)1在一个派生类中,对基类成员、类对象成员和非类对象成员的初始化次序是先 ,后

6、 ,最后为 。2若需要定义一个标识符常量,并且使C+能够进行类型检查,则应在定义语句的开始使用保留字 。3若需要把一个函数void F();”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句 。4当一个类对象离开它的作用域时,系统将自动调用该类的 。5假定AB为一个类,则执行AB a8;”语句时,系统自动调用该类构造函数的次数为 。6动态多态性是在程序运行时通过改变具有虚函数定义的基类 ,使其指向不同派生类 从而调用不同版本的 ,动态地实现对同一消息的不同响应。四、读程并写出程序的运行结果(每小题5分,共20分)1、#includevoid swap(int x,int &y);v

7、oid main()int a(10),b;b=a/5;couta=a,b=bendl;swap(a,b);couta=a,b=bendl;void swap(int x,int &y)int temp=x;x=y;y=temp;2、#include class AA public: AA(int i,int j) A=i;B=j;coutConstructorn; AA(AA &obj) A=obj.A+10;B=obj.B+20;coutCopy_Constructorn; AA() coutDestructorn; void print() coutA=A,B=Bprint(); del

8、ete pa; 3、#includeclass B public: B(); B(int i); B(); void Print() ; private: int b;B:B()b=0; coutBs default constructor called.endl;B:B(int i) b=i; coutBs constructor called. endl;B:B()coutBs destructor called.endl; void B:Print()coutbendl;class C:public B public: C(); C(int i,int j); C(); void Pri

9、nt() ; private: int c;C:C()c=0;coutCs default constructor called.endl;C:C(int i,int j):B(i)c=j;coutCs constructor called.endl;C:C()coutCs destructor called.endl; void C:Print() B:Print();coutcendl;void main()C obj(5,6);obj.Print();4、#include class CSample public: CSample(); void Display();private: i

10、nt i; static int k; ; Csmaple:CSample() i=0; k+; void CSample:Display() cout”i=”i”,”k=”kendl;int CSample:k=0;void main() CSample a,b;a.Display();b.Display();五、编程题(第1小题9分,第2小题16分,第3小题15分,共40分)1指出下列程序的错误,并改正。#include class Apublic:A(int i)m=i;void show()coutm;/*found*/void A()private:int m;void main()

11、/*found*/A a;/*found*/a.m+=10;a.show();2已知一个源程序文件main.cpp。其中定义了用于表示日期的类Date,但类Date的定义并不完整。请按要求完成下列操作,将类Date的定义补充完整。(1) 定义私有数据成员year,month和day分别用于表示年,月,日,它们都是int型的数据。请在注释/*1 *之后添加适当的语句。 (2) 完成默认构造函数Date的定义,使Date对象的默认值为:year=1,month=1,day=1,请在注释/* *2*之后添加适当的语句。 (3) 完成重载构造函数Date(inty,intm,intd)的定义,把数据成

12、员year,month和day分别初始化为参数y,m,d的值,请在注释/* *之后添加适当的语句。 (4) 完成成员函数print的类外定义,使其以年月日的格式将Date对象的值输出到屏幕上。请在注释/* *之后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内源程序文件main.cpp清单如下: /main.cpp #include classDate public: /*2* Date(inty,intm,intd) /*3* voidprint()const; private: /datemembers /*1*; voidDate:print()const /*

13、4* intmain() Datenational_day(1949,10,1); national_day.print(); return0; 3、用C+语言定义MyString(包括成员函数的实现代码),使之能符合下面程序及在注释中描述的运行结果的要求:main() MyString s1 = 0123456789, s2(5), s3; s1.display(); / 此时显示出: s2.display(); / 此时显示出(之间是五个空格): s3.display(); / 此时显示出: s3 = s1; s3.display(); / 此时显示出: s2 = s12; s2.disp

14、lay(); / 此时显示出: s1.display(); / 此时显示出: s3 = s2+; s2.display(); / 此时显示出: s3.display(); / 此时显示出: 参考答案及评分标准一 选择题(每小题2分,共20分) 1、C 2、A 3、D 4、C 5、C 6、B 7、C 8、A 9、D 10、A二判断题(每小题1分,共10分)1、2、3、4、 5、6、7、8、9、10、三填空题(每空1分,共10分)1、 基类成员、类对象成员、非类对象成员 2、const3、friend void F();4、析构函数5、86、指针、对象、虚函数四读程序并写出程序的运行结果(每题5分

15、,共20分)1、a=10,b=2 a=10,b=102、Constructor Copy_ Constructor A=12,B=23ConstructorA=5,B=6DestructorDestructorDestructor 3、Bconstructor called. Cconstructor called. 5 6 Cdestructor called. Bdestructor called.4、i=0,k=2 i=0,k=2 五编程题(第1题9分,第2题16分,第3题15分,共40分)1、void A():析构函数没有返回值,可改为A();A a;:没有定义无参构造函数,可改为A

16、a(10);(括号中可以是任意整数。)a.m+=10;:不能在类外访问类的私有成员,将数据成员m的访问权限改为public。2、/*1*int year; int month; int day;/*2*Date() year=1;month=1;day=1; /*3*year=y;month=m;day=d;/*4* coutyear”-“month”-“dayendl; 3、class MyString char cpBody81; public: MyString(const char* p = NULL); MyString(int i); MyString& operator=(con

17、st MyString& s) strncpy(cpBody, s.cpBody, 80); return *this; MyString& operator(int i); MyString& operator+(int i) static MyString s; s = *this; *this = (cpBody0 = 0) ? *this : (*this)1; return s; void display() printf(n, cpBody); ; MyString:MyString(const char* p) if (p = NULL) cpBody0 = 0;else str

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论