C++习题3(继承和多态)

合集下载

c练习题(带答案)

c练习题(带答案)

一、选择题1.C++语言属于( C )。

A)自然语言B)机械语言C)面向对象语言D)汇编语言2.下面选项中不属于面向对象程序设计特点的是(C) 。

A)继承性B)多态性C)相似性D)封装性3.可用作C++语言用户标识符的一组标识符是( B )。

A)void define +WORD B)a3_b3 _123 YNC)for -abc Case D)2a DO sizeof4.假定一个二维数组的概念语句为“int a[3][4]={{3,4},{2,8,6}};”,那么元素a[2][1]的值为(A)。

A)0 B)4 C)8 D)65.以下情形中,哪一种情形可不能挪用拷贝构造函数( B )A)用派生类的对象去初始化基类对象时B)将类的一个对象赋值给该类的另一个对象时C)函数的形参是类的对象,挪用函数进行形参和实参结合时D)函数的返回值是类的对象,函数执行返回挪用者时6.以下哪一关键字可用于重载函数的区分(C)A)extern B)static C)const D)virtual7.以下有关数组的表达中,正确的选项是( B )A)C++中数组的存储方式为列优先存储B)数组名能够作为实参赋值给指针类型的形参C)数组下标索引从1开始,至数组长度n终止D)数组指针的语法形式为:类型名*数组名[下标表达式];8.以下有关继承和派生的表达中,正确的选项是( C)A)派生类不能访问通过私有继承的基类的珍惜成员B)多继承的虚基类不能够实例化C)假设是基类没有默许构造函数,派生类就应当声明带形参的构造函数D)基类的析构函数和虚函数都不能够被继承,需要在派生类中从头实现9.实现运行时多态的机制是( A )A)虚函数B)重载函数C)静态函数D)模版函数10.如有下面的函数挪用:fun(a+b, 3, max(n-1, b));其中实参的个数是(A)A)3 B)4 C)5 D)611.以下关于this指针的说法正确的选项是(B)A)this指针存在于每一个函数当中B)在类的非静态函数中this指针指向挪用该函数的对象C)this指针是指向虚函数表的指针D)this指针是指向类的函数成员的指针12.在以下关于C++函数的表达中,正确的选项是(C)A)每一个函数至少要有一个参数B)每个函数都必须返回一个值C)函数在被挪用之前必需先声明D)函数不能自己调用自己13.以下运算符中,不能重载的是(C)A)&& B)!= C). D)->14.下面程序的输出结果是(B)#include <iostream>using namespace std;int i = 0;int fun(int n){static int a = 2;a++;return a+n;}void main(){int k = 5;{int i = 2;k += fun(i);}k += fun(i);cout << k;}A)13 B)14 C)15 D)1615.下面的程序段的运行结果为(D)char str[] = "job", *p = str;cout << *(p+2) << endl;A)98 B)无输出结果C)字符’b’的地址D)字符’b’16.下面程序的输出结果是( C )#include <iostream>using namespace std;class A{public:A (int i) { x = i; }void dispa () { cout << x << “,”; }private :int x ;};class B : public A{public:B(int i) : A(i+10) { x = i; }void dispb() { dispa(); cout << x << endl; } private :int x ;};void main(){B b(2);();}A)10,2 B)12,10 C)12,2 D)2,2 17.下面程序的输出结果是(C)#include <iostream>using namespace std;class Base{public:Base(int i) { cout << i; }~Base () { }};class Base1: virtual public Base{public:Base1(int i, int j=0) : Base(j) { cout << i; } ~Base1() {}};class Base2: virtual public Base{public:Base2(int i, int j=0) : Base(j) { cout << i; }~Base2() {}};class Derived : public Base2, public Base1{public:Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c),Base2(d), Base(a){ cout << b; }private:Base2 mem2;Base1 mem1;};void main() { Derived objD (1, 2, 3, 4); }A)134122 B)123412 C)D)14321218.下面程序的输出结果是(C)#include <iostream>using namespace std;class Base{public:virtual void f() { cout << “f0+”; }void g() { cout << “g0+”; }};class Derived : public Base{public:void f() { cout << “f+”; }void g() { cout << “g+”; }};void main() { Derived d; Base *p = &d; p->f(); p->g(); }A)f+g+ B)f0+g+ C)f+g0+ D)f0+g0+19.下面程序的输出结果是( C )#include <iostream>using namespace std;class Sample{friend long fun (Sample s){if < 2) return 1;return * fun(Sample);}public:Sample (long a) { x = a; }private:long x;};void main(){int sum = 0;for (int i=0; i<4; i++){sum += fun(Sample(i));}cout << sum;}A)12 B)16 C)10 D)3420.以下程序的输出结果是:(D)#include <iostream>using namespace std;int fun(char *s){ char *p=s;while (*p!='\0') p++;return (p-s);}void main(){cout<<fun("abc")<<endl;}A.0 B. 1 C. 2 D. 3 21.有如下程序段:int i=1;while(1){i++;if (i==10) break;if(i%2==0) cout<<’*’;}执行那个程序段输出字符*的个数是(C)A. 10B. 3C. 422.以下关于虚基类的描述中,错误的选项是(C)A. 使用虚基类可以消除由多继承产生的二义性B. 构造派生类对象时,虚基类的构造函数只被调用一次C. 声明class B:virtual public A 说明类B为虚基类D. 建立派生类对象时,首先调用虚基类的构造函数23.有下类概念Class A {Char *a;Public:A():a(0){}A(char *aa) {new char[strlen(aa)+1] B. char[strlen(aa)+1]C. char[strlen(aa)]D. new char[sizeof(aa)-1]24.假定AA为一个类,a为该类私有的数据成员,GetValue( )为该类公有函数成员,它返回a的值,x为该类的一个对象,那么访问x对象中数据成员a的格式为(X)。

C#习题(内有答案)

C#习题(内有答案)

答案:A 13.在WinForm应用程序中,可以通过以下()方法使一个窗体成为MDI窗体。 A、改变窗体的标题信息 B、在工程的选项中设置启动窗体 C、设置窗体的IsMdiContainer属性 D、设置窗体的ImeMode属性 答案:C 14.字符串连接运算符包括&和()。 A. + B、 C. * D、 / 答案 A 15.在WinForms程序中,如果复选框控件的 Checked属性值设置为 True,表示()。 A、该复选框被选中 B、该复选框不被选中 C、不显示该复选框的文本信息 D、显示该复选框的文本信息 答案:A 16. 假定一个10行20列的二维整型数组,下列哪个定义语句是正确的()。 A. int[]arr = new int[10,20] B、 int[]arr = int new[10,20] C. int[,]arr = new int[10,20] D、 int[,]arr = new int[20;10] 答案:C 17. 以下正确的描述是()。 A. 函数的定义可以嵌套,函数的调用不可以嵌套 B、 函数的定义不可以嵌套,函数的调用可以嵌套 C. 函数的定义和函数的调用均可以嵌套 D、 函数的定义和函数的调用均不可以嵌套 答案:B 18.WinForms中的图片框控件(pictureBox)中能显示以下的图片格式,除了()。 A、.doc B、.bmp C、.gif D、.jpeg 答案:A 19.()方法执行指定为Command对象的命令文本的SQL语句,并返回受SQL语句 影响或检索的行 数。 A、 ExecuteNonQuery B、 ExecuteReader C、 ExecuteQuery D、 ExecuteScalar 答案:A 20.引用类型主要有4种:类类型、数组类型、接口类型和()。 A、对象类型 B、字符串类型 C、委托类型 D、整数类型 答 案:C 21.加载窗体时触发的事件是()。 A、 Click B、Load C、GotFoucs D、DoubleClick 答案:B 22.在.NET中,为了卸载一个名为”myWindowsService.exe”的Windows服务,使用的命令是() A、Unstall myWindowsService.exe B、Installutil /u myWindowsService.exe C、Installutil myWindowsSercicr.exe D、Unstallutil /u myWindowsService.exe 答案:B 23.下列()是的两个主要组件 A、 Command和DataAdapter B、 DataSet和Data Table C、 NET数据提供程序和DataSet D、 NET数据提供和DataAdapter 答案:C 24.改变窗体的标题,需修改的窗体属性是()。 A、Text B、Name C、Title D、Index

面向对象的程序设计语言――C++(第二版)-习题参考答案

面向对象的程序设计语言――C++(第二版)-习题参考答案

面向对象的程序设计语言――C++(第二版)-习题参考答案课后习题答案以及代码习题参考答案第1章1.填空题C++语言概述(1)函数说明,函数体(2)声明区,主程序区,函数定义区(3)多态性(4)namespace,using(5)std(6)cin,(7)//(8)对数据的操作2.判断题(1)对(2)错(3)错(4)错(5)错3.改错题(1)没有函数体,应改为void main() {};(2)语句没有分号,应改为using namespace myspace;(3)cout和操作符共同完成输出的功能,应改为cout“ Input your name:";(4)应改为#include iostream.h4.简答题5.编程题(略)(略)第2章1.选择题基本数据类型、运算符与表达式(1)B (2)D (3)B (4)D (5)B课后习题答案以及代码2.简答题(1)(a)、(c)(e)、(f)、(g)、(h)、(i)(2)(a)、(g)、(i)、(j)(3)(a)5.5(b)0(c)20(d)0,0(e)1(f)1,2(g)3(h)-40(i)2(j)3(k)s1='0's1='9'(l)N!=03.读程序写结果(1)0,15(2)(1、1、1),(-1、-1、-1)(3)(a)a*a+2*a*b+b*b(b)4.0/3.0*3.__-__R*R*R(c)5.0/9.0*(F-32)(d)b=ab=c(4)364143(5)x=14.编程题(略)第3章1.选择题(1)B (2)A (3)A (4)C2.判断题(1)错(2)对(3)对(4)错3.读程序写结果(1)C++的控制语句5)A 5)错((课后习题答案以及代码12 23 3 34 4 4 45 5 5 5 5(2)11 2 11 2 3 2 11 2 3 4 3 2 11 2 3 4 5 4 3 2 1(3)j的值为0;i的值为2;4.编程题(略)第4章1.填空题函数(1)void(2)静态全局变量,static(3)函数重载(4)inline(5)递归函数(6)宏定义命令,文件包含命令,条件编译命令2.判断题(1)错(2)错(3)错(4)错(5)错(6)对(7)错(8)错(9)对(10)对3.读程序写结果(1)x=7,y=4x=9,y=5(2)34.56101(3)162228(4)12 15 18 21 24课后习题答案以及代码(5)2,1,4,1,3,2,1,4.简答题5.编程题(略)(略)第5章1.选择题构造数据类型(1)C (2)D (3)A (4)B (5)C 2.判断题(1)错(2)对(3)对(4)错(5)错3.读程序写结果(1)153(2)422 5 6 8 10(3)__,21(4)419(5)6904(6)43214.编程题(略)第6章1.填空题(1)类,对象,类(2)数据成员,成员函数(3)不能(4)private,protected,public,private (5)成员函数类和对象课后习题答案以及代码(6)friend(7)类名,作用域运算符(8)对象名.成员名,指针变量名-成员名,(*指针变量名).成员名(9)构造,析构,构造,析构(10)常量数据,引用数据(11)全局,数据类型,所属的类(12)常成员,只读(13)成员,友元(14)类数据成员,类成员函数(15)this(16)浅拷贝2.选择题(1)C (2)C (3)B (4)C (5)B(6)C (7)D (8)B (9)C (10)D(11)A (12)C (13)D (14)D (15)B3.改错题(1)man1.salary=1000.00; 不能在类外访问类的私有成员(2)float r=0;和float c=0; 类本身是抽象的,不能在类的定义体中给其数据成员赋值}后缺少分号“;”(3)成员函数void setdata(float x1,float y1,float r);没有实现(4)构造函数名point()应与类名同名,为Point没有头文件包含#include iostream.h4.读程序写结果题(1)x=0,y=0x=100,y=200(2)x=100,y=200x=1000,y=2022年t=3.14(3)Sta::fun2()=10s.fun2()=11r.a=20(4)Constructor1 called!x=0Constructor2 called!x=100Destructor called!Destructor called!(5)课后习题答案以及代码575.简答题6.编程题(略)(略)第7章1.填空题(1)继承(2)基类,派生类(3)private,protected,public,private (4)不可访问,保护,公有(5)私有(6)单(一),多(重)(7)赋值兼容规则(8)静态,动态(9)抽象类2.选择题继承和派生(1)B (2)A (3)B (4)C (5)B (6)A (7)D (8)B (9)B (10)B(11)D (12)B3.改错题(1)本题的错误主要是数据成员的访问权限问题:基类的私有成员在派生类中不可访问,如fb()函数中的a3=30;语句;类的私有和保护成员在类外不能访问,如main函数中的x.a2 =20;.a3=30; ,y.a2=200; ,y.a3=300; ,y.b2=2022年;和y.b3=3000;语句。

C++练习题(含答案)

C++练习题(含答案)

C++练习题一、掌握递归调用:任何有意义的递归调用总是由两部分组成的,即递归公式与递归结束条件。

递归函数设计的一般形式是:函数类型递归函数名f (参数x ){if(满足结束条件)结果=初值;else结果=含f(x-1)的表达式;返回结果;}例题:书P81例4-12,例4-13,二、掌握冒泡排序法算法:如果一个数组b,有n个数,则要进行n-1趟比较,在第一趟中要进行n-1次两两比较,在第j趟中要进行n-j次两两比较,冒泡排序的算法如下边:void bubble ( int b[ ], int n){for ( int i=0; i<n-1;n++ );for ( int j=0;j<n-1-i ; j++);if ( b[j]<b[i] ){int t=b[j];b[j]=b[j+1];b[j+1]=t;}}例题:书P143例7-3三、掌握二维数组的应用例题:书P146例7-4,例7-6四、练习1.C++中两个逻辑常量是什么?(true,false)C++语言和C语言的不同点(C++为面向对象程序设计,C为面向过程程序设计或称结构化程序设计)。

2.C++语言的具有抽象、封装、继承、多态的特点,理解每个特点的意思(课本P3-P4)3.表达式中不同类型的数据进行混合运算时,不同类型数据的转换顺序。

比如10+a+x*y,其中a为float型,x为int型,y为double型,那么整个表达式的值是什么类型?(double型)4.复合的赋值运算符(a+=b、x*=y+8、%=)的用法a+=b 相当于a=a+bx*=y+8 相当于x=x*(y+8)a%=b 相当于a=a%b5.在类中声明一个友元函数的格式?比如viod fun()函数是类A的友元函数。

友元函数的限定词:friend例: friend viod fun()6.熟悉三目运算符(?:)(课本P47)、自增(++)自减(--)的用法格式:关系表达式?表达式1:表达式2功能:当关系表达式的值为真,结果为表达式1的值,关系表达式的值为假,结果为表达式2的值例:若有定义”int x=4,y=5;”,则表达式”y>x++?x--:y++”的值为( C )A) 3 B) 4 C) 5D) 6《习题与指导》P5 第27-32题,自增自减: 《习题与指导》P4第17题7.三个循环语言(for、while、do…while)的用法,给定条件后,会判断循环次数。

c++复习题及答案(完整版)

c++复习题及答案(完整版)
37、MFC是一个功能强大、结构复杂和庞大的类库。T
38、C++支持多态性。T
40、返回值类型、参数个数和类型都相同的函数也可以重载。F
41、“引用”作为目标的别名而使用,对引用的改动实际就是对目标的改动。引用不是值,不占存储空间,声明引用时,目标的存储状态不会改变。T
42、使用关键字class定义的类中缺省的访问权限是私有(private)的。T
37、用一个对象去构造同类的另一个新对象需要调用(复制构造函数)。
38、用new为对象动态分配内存,当程序完毕必须用(delete)释放。
39、类的每个普通成员函数都有一个隐含的this指针参数,this指针指向(正在被成员函数操作)的对象。
40、设pt为T类的一个指针,pt=new T[10]操作须调用(10)次构造函数。
A可以重载B其名字与类名相同C可以显式调用构造函数D构造函数是成员函数E构造函数不能是虚函数
3、判断题(正确的请写T,错误的请写F)(20分)
静态成员函数可以直接调用类中说明的非静态成员。(F)
windows应用程序采用基于消息的事件驱动运行机制。(T)
4、找出程序中的错误并改正(10分)
class student()
20、抽象类必须有一个(纯虚)函数,并且不能产生自己的(对象)。
21、C++规定,动态联编通过多态性来实现,实现多态性的同名函数必须(形参表和返回值)相同。
22、面向对象的模型中,最基本的概念是对象和(类)。
23、软件设计模块化的目的是(降低复杂性)。
24、派生类的成员一般分为两部分,一部分是(改造基类的成员),另一部分是自己定义的新成员。
{
private:public:

C++习题3(继承和多态)

C++习题3(继承和多态)

C++习题3(继承和多态)C++习题3(继承和多态)一、选择题1、在C++中,类与类之间的继承关系具有( C )A)自反性 B)对称性 C)传递性 D)反对称性2、在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( B )A)受限制 B)保持不变 C)受保护 D)不受保护3、按解释中的要求在下列程序划线处填入的正确语句是:( C )#include class Base{public:void fun(){cout<<"Base::fun"<<=""> fun()cout<<"Derived::fun"<fun();4、在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( C )A)受限制 B)保持不变 C)受保护 D)不受保护5、在哪种派生方式中,派生类可以访问基类中的protected 成员(B )A)public和private B)public、protected和private C)protected和private D)仅protected6、当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的(C)A)public成员 B)private成员 C)protected成员 D)友元7、不论派生类以何种方法继承基类,都不能使用基类的(B )A)public成员 B)private成员 C)protected成员 D)public成员和protected成员8下面叙述错误的是(S )。

A )基类的protected成员在派生类中仍然是protected的 B)基类的protected成员在public派生类中仍然是protected的C)基类的protected成员在private派生类中是private的 D)基类的protected 成员不能被派生类的对象访问9、下列说法中错误的是(S )。

《C#程序设计》习题集.

《C#程序设计》习题集.

《C#程序设计》习题集班级:__________________学号:__________________姓名:__________________2013年3月第1章.NET平台与Visual Studio 2008开发工具一、选择:1. 下列语句在控制台上的输出是什么?( b )static void Main(string[] args){if (true)System.Console.WriteLine("FirstMessage");System.Console.WriteLine("SecondMessage");}a) 无输出 b)FirstMessage c)SecondMessage d)FirstMessageSecondMessage2. C#中导入某一命名空间的关键字是( B )。

a) use b) using c)include d) import3. C#源程序文件的拓展名是(D)A、vbB、cC、cppD、cs4.以下程序的输出结果是(D)string str="b856ef10";string result="";for(int i=0;str[i]>='a' && str[i]<='z';i+=3){result =str[i]+result;Console.WriteLine(result);}A、10fe658bB、febC、10658D、b5. Visual 开发平台是(B)公司提供的.NET应用程序集成开发工具。

A)Borland B)Microsoft C)Intel D)IBM 6.在Visual 窗口,(B )窗口显示了当前Visual Studio解决方案的树型结构。

A.类视图 B. 解决方案资源管理器 C. 资源视图 D. 属性7.在C#中,引用命名空间System的正确语句是( A )ing System;B.# import <System>;es System;D.# include <System>;二、填空:1.在C#程序中,程序的执行总是从(Main )方法开始的2.可使用Console类的(ReadLine )方法,在控制台程序运行时输入信息。

面向对象程序设计习题-填空

面向对象程序设计习题-填空

面向对象程序设计习题-填空题1.在计算机中书写C++语言程序需要用到(编辑器)程序。

2.(链接程序)将编译器输出和各种库函数结合起来,可产生可执行程序。

3.C++语言是面向(对象)的语言。

4.C语言是广为人知的(UNIX )操作系统语言。

5.唯一能让计算机直接理解的语言称为计算机的(机器语言)。

6.面向结构的程序设计方法主要由以下3种逻辑结构组成:顺序结构、(循环结构)和(选择结构)。

7.面向对象的程序设计达到了软件工程的3个目标,即(重用性)、灵活性和扩展性。

8.面向对象系统最主要的特性是(封装性)、(继承性)和多态性。

9.(继承)机制为程序提供了一种组织、构造和重用类的手段。

10.(多态)指对象接收到不同消息时产生不同的行为方式。

11.每一个C++语言程序从(main )函数处开始执行。

12.每个函数体从({)开始,从(})结束。

13.每个C++语言语句以(; )结束。

14.(cin )对象通过键盘输入值。

15.(// )用于为程序做单行注解,提高程序的可读性。

16.(cout )用于在屏幕上打印信息。

17.C++语言使用运算符“<<”和“>>”分别实现(输入)和(输出)。

18.预处理器指令以(# )符号开头。

19.标准命名空间可以简写成为(std )。

20.为了使用C++语言的标准字符串类,必须要包含头文件(string )。

21.布尔型是最简单的数据类型,它有两种表示形式:(true )和(false )。

22.声明枚举的关键字是(enum )。

23.C++语言的数据类型十分丰富,包括基本数据类型、(派生类型)和(类类型)。

24.按照存储空间,整型又可分为短整型、(整型)和(长整型)。

25.C++语言中的(sizeof )运算符,可以用来计算一个特定对象或类型存储时需要的字节数。

26.浮点类型取值范围的定义包含在标准头文件(climits )中。

27.在程序运行过程中,有些值会保持不变,称之为(常量)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、选择题1. 在C++中,类与类之间的继承关系具有(C )A)自反性B)对称性C)传递性D)反对称性2. 在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(BA)受限制B)保持不变C)受保护D)不受保护3. 按解释中的要求在下列程序划线处填入的正确语句是:(C )#in elude <iostream.h>class Base{ public:void fun(){cout<v"Base::fun"<<endl ;}};class Derived:public Base{public :void fun (){ _______ // 在此空格处调用基类的函数fun()cout<<"Derived::f un "<<e ndl ;}};A)fu n(); B)Base.fu n(); C)Base::fu n ();D)Base->fun();4. 在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(C )A)受限制B)保持不变C)受保护D)不受保护5. 在哪种派生方式中,派生类可以访问基类中的protected 成员(B )A)public 禾口private B)public 、protected 禾口privateC)protected 禾口private D)仅protected6. 当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的(C)A) public 成员B) private 成员C) protected成员D) 友元7. 不论派生类以何种方法继承基类,都不能使用基类的(B )A) public 成员B) private 成员C) protected 成员D) public 成员和protected 成员8 下面叙述错误的是( S )。

A) 基类的protected 成员在派生类中仍然是protected 的B) 基类的protected 成员在public 派生类中仍然是protected 的C) 基类的protected 成员在private 派生类中是private 的D) 基类的protected 成员不能被派生类的对象访问9. 下列说法中错误的是( S )。

A) 保护继承时基类中的public 成员在派生类中仍是public 的B) 公有继承时基类中的private 成员在派生类中仍是private 的C) 私有继承时基类中的public 成员在派生类中是private 的D) 保护继承时基类中的public 成员在派生类中是protected 的10下面叙述错误的是( C)。

A) 派生类可以使用private 派生B) 对基类成员的访问必须是无二义性的C) 基类成员的访问能力在派生类中维持不变D) 赋值兼容规则也适用于多继承的组合11派生类的构造函数的成员初始化列表中,不能包含(C )。

A) 基类的构造函数B) 派生类中子对象的初始化C) 基类中子对象的初始化D) 派生类中一般数据成员的初始化12. 下列虚基类的声明中,正确的是: ( B )A)class virtual B: public A B)class B: virtualpublic AC)class B: public A virtual D)virtual class B:public A13..实现运行时的多态性采用(D )A)重载函数B)构造函数C)析构函数D)虚函数14. 若一个类中含有纯虚函数,则该类称为(D )A)基类B)纯基类C)派生类D)抽象类15. 假设A为抽象类,下列声明(B )是正确的A) A fun(in t); B) A *p; C) int fun (A); D) A Obj;16. 在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(B)A)不同B)相同C)相容D)部分相同17. 下面函数原型声明中,(C)声明了fun为普通虚函数A) void fun()=0; B) virtual void fun()=0;C) virtual void fun(); D) virtual void fun(){};18. 在下面四个选项中,(A)是用来声明虚函数的。

A)virtual B)public C)usi ng D)false19. 实现运行时的多态性要使用(D)。

A)重载函数B)构造函数C)析构函数D)虚函数20. 关于虚函数的描述中,正确的是(D)。

A)虚函数是一个静态成员函数B)虚函数是一个非成员函数C)虚函数既可以在函数说明时定义,也可以在函数实现时定义D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型二、填空题:1. 派生类对基类的继承有三种方式:_public_ __ 、_protected __ __ 和__private __ __ 。

2. 如果类Alpha继承了类Beta,则类Alpha称为__派生——类,类Beta称为__基 _类。

3. 设置虚基类的目的是为了消除二义性,可通过_virtual 标识虚基类。

4. 类继承中,缺省的继承方式是private ___________ 。

5. 当用protected 继承从基类派生宀个类时,基类的public 成员成为派生类的protected ___________ 员,protected 成员成为派生类的_ protected _ ________ 成员。

6 •指向基类的对象的指针变量也可以指向公有派生类的对象。

二、程序题1. 继承的工作方式,完成以下代码。

要求: (1)处继承方式为共有继承public , (2)处填写基类的ai , (3)处填写派生类的bi , (4)对象b的数据成员有哪些?ai,bi#i nclude<iostream.h>#i ncludevstri ng.h>class A{public:A(){ai=1;}protected:int ai;};class B: _____ A{public:B(){bi=2;}void display(){cout<< ___ (2) ___ <<(3)_ <<e ndl;}private:int bi;};int mai n(){B b;b.display();}2. 派生类的构造。

派生类的构造总是由基类的初始化开始的。

效果是:#i nclude<iostream.h> class A{ public:A(int i){x=i; cout<<"CA:"<<x<<endl;} 〜A(){cout<v"DA"vve ndl;} private: int x;};class B:public A{ public:B():_ A(90) {y=O;cout<v"CB"vvendl;}〜B(){cout<<"DB"<<e ndl;} private:int y;};int mai n(){B b;}3. 填写初始化列表,完成以下程序,使得屏幕输出:#i nclude<iostream.h> class A{ public:A(i nt i){x=i; cout<<x<<e ndl;} private: int x;class D{ public:D(i nt i){m=i;cout<<m<<e ndl;}private: int m;}; class B:public A{ public:B():_ A(90),d(19) {y=o;} private: int y;D d;};int mai n(){B b;}4. 请问以下程序输出什么?#i nclude<iostream.h> class A{ public:A(i nt i){x=i;} int x;};class B:public A{ public:B(int i):A(i+1){y=i;} int y;};void f1(A & ra){coutvvra.xvve ndl;}void f2(A * pa){cout<<pa->x<<e ndl;}int mai n()B b(3); f1(b); f2(&b);4答案:5. 请问以下程序输出什么?#i nclude<iostream.h>class A{public:void display(){cout<v"A"v<e ndl;} };class B:public A{public:void display(){cout<v"B"v<e ndl;} };void f(A &r){r.display();}int mai n(){B b;f(b);A a;f(a);6. 多态性,虚函数。

请问以下程序输出什么?#i nclude<iostream.h>class A{public:virtual void display(){cout<v"A"v<e ndl;} };class B:public A{public:virtual void display(){cout<<"B"<<e ndl;} };void f(A &r){r.display();}int mai n(){B b;f(b);A a;f(a);}6. 答案: 17. 请问以下程序输出什么?#i nclude<iostream.h>class A{public:virtual void display(){cout<<"A"<<e ndl;} };class B:public A{public:virtual void display(){cout<<"B"<<e ndl;} };class C:public A{public:virtual void display(){cout<v"C"v<e ndl;} };int mai n(){A a,aa;B b;C c,cc,ccc;A *pa[6]={&a,&aa,&b,&c,&cc, &ccc}; int i=0;for(i=0;i<6;++i)pa[i]->display();8.以下程序的屏幕输出是为何以下程序的屏幕输答案:出中会输出DA呢?请说明#in clude<iostream.h>class A{public:〜A(){cout«"DA ";}};class B:public A{public:〜B(){cout«"DB ";}};int mai n(){B b;}答案:定义类B对象b时,先调用基类A的构造函数,再调用派生类类B的构造函数。

相关文档
最新文档