收藏 分享(赏)

面向对象程序设计复习(答案).doc

上传人:dzzj200808 文档编号:2733548 上传时间:2018-09-26 格式:DOC 页数:37 大小:249KB
下载 相关 举报
面向对象程序设计复习(答案).doc_第1页
第1页 / 共37页
面向对象程序设计复习(答案).doc_第2页
第2页 / 共37页
面向对象程序设计复习(答案).doc_第3页
第3页 / 共37页
面向对象程序设计复习(答案).doc_第4页
第4页 / 共37页
面向对象程序设计复习(答案).doc_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、语法扩充1.1 选择题在 C+中用( D )能够实现将参数值带回。a)数组 b)指针 c)引用 d)上述 ABC 都可考虑函数原型 void test(int a,int b=7,char *ch=“*“),下面的函数调用中,属于不合法调用的是:( C )A)test(5) B)test(5,8) C)test(6,“#“) D)test(0,0,“*“);已知: int m=10;下列表示引用的方法中,正确的是:( C )A)int 当输入Microsoft Visual Studio 6.0!所得结果是 str=(B ) 。A、 Microsoft Visual Studio 6.0!B、

2、 MicrosoftC、 Microsoft Visual D、 Microsoft Visual Studio 6.0.函数模板(C) 。A、代表某一具体函数B、与模板函数是同一个函数C、与某一个具体的数据类型连用D、是模板函数实例化的结果在 C+中,关于下列设置参数默认值的描述中,正确的是(C )A、不允许设置参数的默认值B、设置参数默认值只能在定义函数时设置C、设置参数默认值时,应该是先设置右边的再设置左边的D、设置参数默认值时,应该全部参数都设置下列表示引用的方法中, (A )是正确的。已知: k=1000; A、int B、char C、int D、float 有如下模板定义:tem

3、plate T fun(T x,T y)return x*x+y*y;在下列对 fun 的调用中,错误的是 :( C )A)fun(2,8) B)fun(2.0,8.2) C)fun(2.3,8) D)fun (2,8)通常情况下,函数模板中的类型参数个数不能是( A )A)0 个 B)1 个 C)2 个 D)3 个1.2 填空题1、 假定有如下定义:int x;,若要将整型变量 y 定义为变量 x 的引用,则应使用的定义语句是_int _。具有相同函数名但具有不同参数表的函数称为 重载函数。 2、 在进行函数调用时,将把参数的值传递给值参数,把参数的_地址_传递给引用参数。 3、 执行完下列

4、三条语句后,指针变量 c 指向_b_。Int a,b,*c=int *p= 4、 假设有如下函数定义:void Fun(int x,int y=100); 则语旬 Fun(5)语句_ Fun(5,100)_等价。5、 在一个 C+程序中,每个变量都必须遵循_先定义后使用_的原则。 6、 下面是一个求数组元素之和的程序。主程序中定义并初始化了一个数组,然后计算该数组各元素之和,并输出结果。函数 TotalSum 计算数组元素之和。请完成下列程序。#include _ int Totalsum(int array,int len)_ ;void main()int a5=2,3,6,8,10;_i

5、nt Total _;Total =Totalsum(a,5);coutvoid main()int x;int x=10;p=x+10;coutint f(int a)return +a;int g(int void main()int m=0,n=0;m+=f(g(m);n+=f(f(n);coutvoid Fun()int num=20;cout静态成员函数没有( B )。A返回值 B. this 指针 C. 指针参数 D. 返回类型在下列关键字中,用于说明类中公有成员的是( A ) 。Apublic ; Bprivate; Cprotected ; Dfriend不是构造函数的特征(

6、D )。A构造函数的函数名与类名相同; B. 构造函数可以重载;C. 构造函数可以设置缺省参数; D. 构造函数必须指定类型说明。是析构函数的特征( A )。A一个类中只能定义一个析构函数; B. 析构函数名与类名不同;C. 析构函数的定义只能在类体内; D. 析构函数可以有一个或多个参数。关于成员函数特征的下述描述中,( A )是错误的。A成员函数一定是内联函数; B. 成员函数可以重载;C. 成员函数可以设置参数的缺省值; D. 成员函数可以是静态的。下述静态数据成员的特性中,( D )是错误的。A 说明静态数据成员时前边要加修饰符 static;B 静态数据成员要在类体外进行初始化;C引

7、用静态数据成员时,要在静态数据成员名前加和作用域运算符;D静态数据成员不是所有对象所共用的。2.2 填空题1、 在撤销类的对象时,C+程序将自动调用该对象的_析构_函数。 2、 类中的构造函数是一个特殊的成员函数,它由类的对象_自动_调用,它的作用是_为对象分配内存,数据成员初始化_。 3、 对类中的成员函数和属性的访问是通过_public_、_protected_和_private _这 3 个关键字来控制的。 4、 _delete_运算符删除 new 运算符所动态分配的内存空间。 5、 假定用户没有给一个名为 MyClass 的类定义析构函数,则系统为其定义的默认析构函数形式为_MyCla

8、ss()_。 6、 类中构造函数有_一个或多_个,析构函数有_一_个。 7、 类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的_数据成员_ ,共同行为被描述为类中的_成员函数_。 8、 若要把类 FriendClass 定义为类 MyClass 的友元类, 则应在类 MyClass 的定义中加入语句_friend class FriendClass; _。 9、 在结构定义中,数据和成员函数默认权限是_public _。在类定义中,数据和成员函数默认权限是_private_。 10、 在下面程序的横线处填上适当的语句,使类型该程序执行结果为 10。#include clas

9、s MyClasspub1ic:_ MyClass ( int a ) _x = a; _/为 x 置值_int GetNum() return x; _ /取 x 值private:int x;void main()Myclass my(10);Coutclass MyClasschar ch;public:MyClass();MyClass(char character);void Print();MyClass();MyClass:MyClass()coutclass MyClasspublic:MyClass();void Print();MyClass();private:int I

10、;static int j;int MyClass:j=0;MyClass:MyClass()coutclass Basepublic:void fun()coutfun();.在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( C )A)受限制 B)保持不变 C)受保护 D)不受保护.下面描述中,表达错误的是:( B )A)公有继承时,基类中的 public 成员在派生类中仍是 public 的B)公有继承时,基类中的 private 成员在派生类中仍是 private 的C)公有继承时,基类中的 protected 成员在派生类中仍是 protected 的D)私有继承时,

11、基类中的 public 成员在派生类中是 private 的.下列虚基类的声明中,正确的是:( B )A)class virtual B: public A B)class B: virtual public A C)class B: public A virtual D)virtual class B: public A.C+设置虚基类的目的是( A )A)消除二 义性 B)简化程序 C)提高运行效率 D)减少目标代码class Xint a;public:X(int x=0)a=x;class Y:public Xint b;public :Y(int x=0,int y=0):X(y)

12、b=x;下列语句组中出现语法错误的是(D )A. X *pa=new Y(1,2);B.X a1=Y(1,3);C.Y b1(2,3); X D.X a4(10);Y b2=a4;class Base public: int i;Base(int t) : i ( t ) ;class Derived: protected Base Base b;int j;public:Derived (int t);在构造函数 Derived 的下列定义中,正确的是(B )A. Derived : : Derived (int t) : b(t), j(t) B. Derived : : Derived

13、(int t) : b(t), Base(t), j(t) C. Derived : : Derived (int t) : Base(t), j(t) D. Derived : : Derived (int t) : i(t), b(t), j(t) 在哪种派生方式中,派生类可以访问基类中的 protected 成员(B )A)public 和 private B)public、protected 和 private C)protected 和 private D)仅 protected在 C+中,类与类之间的继承关系具有(C )A) 自反性 B) 对称性 C) 传递性 D) 反对称性下列关

14、于类的继承描述中, (A )是错误的A) 派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数B) 派生类也是基类,但基类不一定具有派生类的全部属性和方法C) 继承描述类的层次关系,派生类可以具有与基类相同的属性和方法D) 一个基类可以有多个派生类,一个派生类可以有多个基类.当一个派生类仅有 protected 继承一个基类时,基类中的所有公有成员成为派生类的(C)A) public 成员 B) private 成员 C) protected 成员 D) 友元当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( B )A) public 成员 B) privat

15、e 成员 C) protected 成员 D) 友元不论派生类以何种方法继承基类,都不能使用基类的(B )A) public 成员 B) private 成员 C) protected 成员 D) public 成员和 protected 成员在创建派生类对象时,构造函数的执行顺序是(D )A) 对象成员构造函数、基类构造函数、派生类本身的构造函数B) 派生类本身的构造函数、基类构造函数、对象成员构造函数C) 基类构造函数、派生类本身的构造函数、对象成员构造函数D) 基类构造函数、对象成员构造函数、派生类本身的构造函数下列虚基类的声明中,正确的是( D ) 。 A)class virtual

16、B:public A B)virtual class B:public A C)class B:public A virtual D)class B:virtual public A下面叙述错误的是(A ) 。 A)基类的 protected 成员在派生类中仍然是 protected 的 B)基类的 protected 成员在 public 派生类中仍然是 protected 的 C)基类的 protected 成员在 private 派生类中是 private 的 D)基类的 protected 成员不能被派生类的对象访问 下列说法中错误的是(A ) 。 A) 保护继承时基类中的 publi

17、c 成员在派生类中仍是 public 的 B)公有继承时基类中的 private 成员在派生类中仍是 private 的 C)私有继承时基类中的 public 成员在派生类中是 private 的 D)保护继承时基类中的 public 成员在派生类中是 protected 的 关于多继承二义性的描述中,错误的是(B ) 。 A)一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性 B)解决二义性的最常用的方法是对成员名的限定法 C)基类和派生类中同时出现的同名函数,也存在二义性问题 D)一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进

18、行访问时,可能出现二义性 下面叙述错误的是(C ) 。 A)派生类可以使用 private 派生 B)对基类成员的访问必须是无二义性的 C)基类成员的访问能力在派生类中维持不变 D)赋值兼容规则也适用于多继承的组合 派生类的构造函数的成员初始化列表中,不能包含(C ) 。 A)基类的构造函数 B)派生类中子对象的初始化 C)基类中子对象的初始化 D)派生类中一般数据成员的初始化 下面(B )的叙述不符合赋值兼容规则。 A)派生类的对象可以赋值给基类的对象 B)基类的对象可以赋值给派生类的对象 C)派生类的对象可以初始化基类的引用 D)派生类的对象的地址可以赋值给指向基类的指针.下列虚基类的声明

19、中,正确的是:( B )A)class virtual B: public A B)class B: virtual public A C)class B: public A virtual D)virtual class B: public A.C+设置虚基类的目的是( A )A)消除二 义性 B)简化程序 C)提高运行效率 D)减少目标代码3.2 填空题1、 垂直访问时,保护成员的访问控制权限与_公有_成员相同。 2、 利用继承能够实现_代码复用_。这种实现缩短了程序的开发时间,促使开发人员复用已经测试和调试好的高质量软件。 3、 派生类对基类的继承有三种方式:_ public_、_pro

20、tected_ 和_private_。 4、 多继承情况下,派生类的构造函数的执行顺序取决于_定义_派生类时所指定的各基类的顺序。 5、 C+提供的_多继承_机制允许一个派生类继承多个基类,即使这些基类是相互无关的。6、 派生类可以调用其_定义_中不具备的数据和操作。 7、 对基类数据成员的初始化必须在派生类构造函数中的_初始化列表_处执行。 8、 如果类 Alpha 继承了类 Beta,则类 Alpha 称为_派生_类,类 Beta 称为_基_类。 9、 己知下面的程序框架,按注释中的提示补充细节。#include class planetprotected:double distance;

21、_/行星距太阳的距离int revolve;_/行星的公转周期public:planet(double d,int r)distance=d;revolve=r;class earth:public planetdouble circumference; /地球绕太阳公转的轨道周长public:/定义构造函数 earth(double d,int r),并计算地球绕太阳公转的轨道周长。/假定:circumnference=2*d*3.1416_ earth(double d,int r): planet (d, r)_ circumnference=2*d*3.1416;_/定义 show()

22、函数显示所有信息_void show() cout#include void main()Rectangle rect(1,2,3,4);rect.Move(5,6);coutclass Pointpublic:point(double a,double b,double c)_X =a; Y=b; Z =c;_double Getx()return X;double Gety()return Y;double Getz()return Z;private:_double X, Y;_protected:_double Z;_;class Line :_public_Pointpublic:L

23、ine(double a ,double b,double c,double d)_:Point(a,b,c)_K = d;_ void show()coutclass Basepublic:void Who()coutWho();p=p-Who();p=p-Who();obj2.Who();obj3.Who();答案:class Baseclass Baseclass Baseclass Derived1class Derived22、 写出下列程序的运行结果。#include class instrumentpublic: void display() constcoutclass Apu

24、blic:A(char i)coutclass Basepublic:Base()coutclass Instrumentpublic:virtual void Print() constcoutclass convertpublic:convert(double I)va11=I;_ virtual void compute()=0; _protected:double val1;double va12:;/liters to gallonsclass l_to_g:public convertpublic:_ l_to_g(double I):convert(I) _void comput

25、e()va12=va11/3.7854;coutclass Basepublic:Base(int I)b=I;_ virtual Print()=0; _protected:int b;class Derive1:public Basepublic:_ Derive1(int;void main()Derive1 *d1=new Derive1(1);Derive2 *d2=new Derive2(2);fun(d1);fun(d2); 13、 在一个成员函数内调用一个虚函数时,对该虚函数的调用进行_动态_联编。 14、 带有_纯虚函数_的类称为抽象类,它只能作为_基类_来使用。 4.3 简

26、答题A、成员函数重载与虚函数的区别B、静态联编和动态联编的含义C、纯虚函数和抽象类的定义及其关系D、抽象类的特点4.4 读程序题1、写出下列程序的运行结果。#include class Basepublic:Base(int i)x=i;coutclass Basepublic:Base():x(0),y(0)Base(int I,int j):x(I),y(j)int GetX() constreturn x;int GetY() constreturn y;virtual void Print() constcoutPrint();Base *d2=new Derived(10,20,30

27、);d2-Print();delete d2;delete d1;答案x+z=0 y+z=0x+z=40 y+z=50x+z=40 y+z=50x=10 y=20x+z=0 y+z=0x=0 y=03、 阅读下列程序,回答后面提出的问题。#include class Vehiclepublic:void SetColor(int c)color=c;virtual void Move()coutMove();delete vec;vec=new Bus;vec-Move();delete vec;vec=new SportsCar;vec-Move();delete vec;vec=new C

28、oupe;vec-Move();delete vec;答案:Carmoving.Bus moving.Carmoving.Coupe moving.运算符重载5.1 选择题友元运算符 objobj2 被 C+编译器解释为(A ) 。 A)operator(obj1,obj2) B)(obj1,obj2) C)obj2.operator(obj1) D)obj1.oprator(obj2) 下面对 C+运算符的正确的描述是(D ) 。 A)只有类成员运算符 B)只有友元运算符 C)只有非成员和非友元运算符 D)上述三者都有 下列关于 C+运算符函数的返回类型的描述中,错误的是(C ) 。 A)可以是类类型 B)可以是 int 类型 C)可以是 void 类型 D)可以是 float 类型 重载赋值操作符时,应声明为(C)函数。 A)友元 B)虚 C)成员 D)多态 在一个类中可以对一个操作符进行(D )重载。 A)1 种 B)2 种以下 C)3 种以下 D)多种 下列关于运算符重载的描述中,正确的是(D ) 。 A)运算符重载可以改变运算符的操作数的个数 B)运算符重载可以改变优先级 C)运算符重载可以改变结合性 D)运算符重载不可以改变语法结构 下列运算符中, (C)运算符在 C+中不能重载。

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报