ImageVerifierCode 换一换
格式:DOC , 页数:15 ,大小:84KB ,
资源ID:1334604      下载积分:5000 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
注意:如需开发票,请勿充值!
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.mydoc123.com/d-1334604.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(【计算机类职业资格】国家二级(C++)机试模拟试卷151及答案解析.doc)为本站会员(livefirmly316)主动上传,麦多课文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文库(发送邮件至master@mydoc123.com或直接QQ联系客服),我们立即给予删除!

【计算机类职业资格】国家二级(C++)机试模拟试卷151及答案解析.doc

1、国家二级(C+)机试模拟试卷 151 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.在关系代数运算中,有 5 种基本运算,它们是( )。(分数:2.00)A.并()、差(-)、交()、除()和笛卡儿积()B.并()、差(-)、交()、投影()和选择()C.并()、交()、投影()、选择()和笛卡儿积()D.并()、差(-)、投影()、选择()和笛卡儿积()2.在数据库系统的组织结构中,下列( )映射把用户数据库与概念数据库联系了起来。(分数:2.00)A.外模式模式B.内模式外模式C.模式内模式D.内模式模式3.下列关于线性链表的描述中,正

2、确的是( )。 、只含有一个指针域来存放下一个元素地址 、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件) 、结点由两部分组成:数据域和指针域。(分数:2.00)A.仅、B.仅、C.仅、D.全部4.下面关于数据库三级模式结构的叙述中,正确的是( )。(分数:2.00)A.内模式可以有多个,外模式和模式只有一个B.外模式可以有多个,内模式和模式只有一个C.内模式只有一个,模式和外模式可以有多个D.模式只有一个,外模式和内模式可以有多个5.设有关键码序列(66,13,51,76,81,26,57,69,23),要按关键码值递增的次序排序,若采用速排序法,并以第一个元素为划分的基准,

3、那么第一趟划分后的结果为( )。(分数:2.00)A.23,13,5l,57,66,26,81,69,76B.13,23,26,51,57,66,81,76,69C.23,13,51,57,26,66,81,69,76D.23,13,51,57,81,26,66,69,766.下列哪一条不属于数据库设计的任务?( )(分数:2.00)A.设计数据库应用结构B.设计数据库概论结构C.设计数据库逻辑结构D.设计数据库物理结构7.数据库技术的根本目标是( )。(分数:2.00)A.数据存储B.数据共享C.数据查询D.数据管理8.需求分析阶段的任务是( )。(分数:2.00)A.软件开发方法B.软件开

4、发工具C.软件开发费用D.软件系统功能9.关系数据库管理系统能实现的专门关系运算包括( )。(分数:2.00)A.排序、索引、统计B.选择、投影、连接C.关联、更新、排序D.显示、打印、制表10.数据管理技术发展的三个阶段中,( )没有专门的软件对数据进行管理。 人工管理阶段 文件系统阶段 数据库阶段(分数:2.00)A.仅B.仅C.和D.和11.阅读以下程序: #includeiostreamh void maim() static int a2=5,3,1,2; int i,j,s1=0; for(i=0;i2;i+) fort(j=0;j2j+) if(i=j) s1=s1+aij; c

5、outs1endl; 则该程序的输出结果为( )。(分数:2.00)A.6B.7C.8D.912.若有如下程序段: #includeiostream using namespace std; int main() char*p=“abcdefgh,*r; r=p; cout*rendl; return 0; 该程序的输出结果是( )。(分数:2.00)A.aB.bC.cD.d13.有如下程序: #includeiostream using namespace std; void fun(int (分数:2.00)A.x=15B.x=17C.x=23D.x=2516.分析下面程序,该程序的运行结

6、果是( )。 #includeiostreamh class TestClass public: static int m; TestClass () m+; TestClass(int n) re=n; static void test() m+; ;int TestClass:m=0; void main() TestClass A; TestClass B(3); Atest(); TestClass:test(); coutm=B.mendl; (分数:2.00)A.m=3B.m=4C.m=5D.m=617.下列说法中错误的是( )。(分数:2.00)A.公有继承时基类中的 publi

7、c 成员在派生类中仍是 public 的B.公有继承时基类中的 private 成员在派生类中仍是 private 的C.私有继承时基类中的 public 成员在派生类中是 private 的D.保护继承时基类中的 public 成员在派生类中是 protected 的18.下面关于构造函数和析构函数的描述,错误的是( )。(分数:2.00)A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态联编C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D.构造函数可以声明为虚函数19.有如下程序: #includeiostream using namespace st

8、d; class TestClass public: TestClass ()coutBASE; ; class TestClass1:public TestClass public: TestClass1 ()coutDERIVED; ; int main()TestClass1 x;return 0; 执行后的输出结果是( )。(分数:2.00)A.BASEB.DERIVEDC.BASEDERIVEDD.DERIVEDBASE20.设有以下定义和程序: #includeiostreamh class TestClass1 public: void show1() costTestClass

9、1endl; ; class TestClass2:TestClass1 public: void show2() toutTestClass2endl; ; class TestClass3:protected TestClass2 public: void show3() coutTestClass3endl: ; void main() TestClassl obj1; TestClass2 obj2; TestClass3 obj3; 则以下不合语法的调用语句是( )。(分数:2.00)A.obj1show1();B.obj2show1();C.obj3show1();D.obj2sh

10、ow2();21.下面程序段的正确输出是( )。 int w=4,x=3,y=2,z=1; cout(wx?w:zy?z:x)endl;(分数:2.00)A.0B.1C.2D.322.若变量都已正确说明,则以下程序段的输出结果是( ) a=2;b=3;printf(ab?*a=d:#b=da,b);(分数:2.00)A.没有正确的输出格式控制B.输出为:*a=2C.输出为:#=2 ,D.输出为:*a=2#=223.若执行以下程序时从键盘上输入 9,则输出结果是( )。 main() int n; cinn; if(n+10)coutnendl; else coutn-endl; (分数:2.0

11、0)A.11B.10C.9D.824.以下程序的输出结果是( )。 main() int a=4,b=5,c=0,d; d=!a (分数:2.00)A.x=15B.x=17C.x=23 D.x=25解析:解析:由主函数 main 入手,首先 x 被赋值为 3,a 被赋值为 4。然后调用 fun 函数,参数为 4,所以在 fun 函数中的 a=4。而主程序中的 x 作用域是由它定义开始到 cout 输出,在 fun 函数中无效。而在fun 函数定义前的变量 x 作用域是整个程序,所以 fun 函数中的 x 值为 5,这样 c 的值就为 20。在主函数中的 x+fun(a)中的 x 为靠近这条语句

12、的 x 定义,即 3,所以最后 x 的值为 20+3=23。16.分析下面程序,该程序的运行结果是( )。 #includeiostreamh class TestClass public: static int m; TestClass () m+; TestClass(int n) re=n; static void test() m+; ;int TestClass:m=0; void main() TestClass A; TestClass B(3); Atest(); TestClass:test(); coutm=B.mendl; (分数:2.00)A.m=3B.m=4C.m=5

13、 D.m=6解析:解析:由主函数 main 入手,首先定义 TestClass 对象 A,B;对象 B 构造函数值为 3,构造函数中m+,所以这时 m=4。主函数中调用 Atest(),因为“static int m;”,m 被定义为类 TestClass 静态成员变量,当它的值改变后,则在各对象中这个数据成员的值都同时改变了。所以这里执行“Atest();”中的 m 为前面进行加 1 操作后的 4,即 m 现在的值为 5。17.下列说法中错误的是( )。(分数:2.00)A.公有继承时基类中的 public 成员在派生类中仍是 public 的B.公有继承时基类中的 private 成员在派

14、生类中仍是 private 的 C.私有继承时基类中的 public 成员在派生类中是 private 的D.保护继承时基类中的 public 成员在派生类中是 protected 的解析:解析:公用继承时基类中的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。私有继承时,基类的公有成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有。受保护的继承时,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员认为基类私有。18.下面关于构造函数和析构函数的描述,错误的是( )。(分数:2.00)A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态

15、联编C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D.构造函数可以声明为虚函数 解析:解析:构造函数的主要作用是对数据成员初始化。构造函数不能声明为虚函数,这是因为在执行构造函数时类对象还未完成建立过程,当然谈不上函数与类对象的关联。19.有如下程序: #includeiostream using namespace std; class TestClass public: TestClass ()coutBASE; ; class TestClass1:public TestClass public: TestClass1 ()coutDERIVED; ; int main

16、()TestClass1 x;return 0; 执行后的输出结果是( )。(分数:2.00)A.BASEB.DERIVEDC.BASEDERIVEDD.DERIVEDBASE 解析:解析:程序中的 TestClassl 为 TestClass 的派生类,从程序中的 main 函数入手,定义了TestClassl 对象 x。调用析构函数的顺序,先执行派生类自己的析构函数,对派生类新增加的成员进行清理,然后调用子对象的析构函数,对子对象进行清理,最后调用基类的析构函数,对基类进行清理。这里派生类中析构函数输出 DERIVED,基类析构函数输出 BASE。20.设有以下定义和程序: #includ

17、eiostreamh class TestClass1 public: void show1() costTestClass1endl; ; class TestClass2:TestClass1 public: void show2() toutTestClass2endl; ; class TestClass3:protected TestClass2 public: void show3() coutTestClass3endl: ; void main() TestClassl obj1; TestClass2 obj2; TestClass3 obj3; 则以下不合语法的调用语句是(

18、 )。(分数:2.00)A.obj1show1();B.obj2show1();C.obj3show1(); D.obj2show2();解析:解析:TestClass1 为 TestClass2 的私有基类,所以派生类 TestClass2 中继承过来的 showl()为私有的。TestClass3 为 TestClass2 的受保护派生类。所以 TestClass3 定义的对象不能访问 TestClass 中的 show1()。21.下面程序段的正确输出是( )。 int w=4,x=3,y=2,z=1; cout(wx?w:zy?z:x)endl;(分数:2.00)A.0B.1 C.2D

19、.3解析:解析:本题考查表达式作为变量进行输出,且表达式为两个三目表达式的嵌套,其中,第 1 个三目表达式 zy?z:x 的值为 1,接着计算第 2 个三目表达式 wx?w:1,值为 1。22.若变量都已正确说明,则以下程序段的输出结果是( ) a=2;b=3;printf(ab?*a=d:#b=da,b);(分数:2.00)A.没有正确的输出格式控制B.输出为:*a=2C.输出为:#=2 , D.输出为:*a=2#=2解析:解析:本题实际上是考查 C 语言中的格式化输入输出知识,同时本题也考查了三目表达式的知识。如果逻辑表达式为真,则执行冒号之前的,否则执行冒号之后的表达式。23.若执行以下

20、程序时从键盘上输入 9,则输出结果是( )。 main() int n; cinn; if(n+10)coutnendl; else coutn-endl; (分数:2.00)A.11B.10 C.9D.8解析:解析:本题考查的是后置自增运算符的知识,这类题考生往往做错,主要原因是不能正确拆解。题中 if 语句可以拆解为:if(910),n+1=10,cout10endl;,自增所代表的加 1 操作要紧跟在原表达式后面,而不是原语句后面。24.以下程序的输出结果是( )。 main() int a=4,b=5,c=0,d; d=!a&!b!c; coutdendl; (分数:2.00)A.l

21、B.0C.非 0 的数D.-1解析:解析:本题考查逻辑运算,只要考生掌握了逻辑运算的优先级就可以正确得到答案为选项 A)。或运算的优先级最高,和!的优先级相同,按照从左到右的顺序计算。25.给出下面程序输出结果( )。 #includeiostmamhvoid main() int *p1; int*p2=&p1; int b=20; p1=&b; cout*p2endl; (分数:2.00)A.10B.20 C.40D.30解析:解析:p1 指向 b,而 p 指向 pl 的地址。*p2 表示 p1 的地址,p1 的地址就是&b,即*p2 是&b,所以*p2 就是 b 变量的值。26.在下面的

22、 4 个关键字中用来说明虚函数的是( )。(分数:2.00)A.virtual B.publicC.protectedD.private解析:解析:C+中用 virtual 关键字声明虚函数。而 public、protected、private 为成员访问限定符。27.如果有以下定义及初始化: int a=3,*p=&a; 则由此可以推断,*p 的值是( )。(分数:2.00)A.变量 a 的值,即 3 B.变量 a 的地址值C.变量 p 的地址值D.无意义解析:解析:此题考查的是指针变量的定义与赋初值。语句*p=&a 是定义指针并且给指针赋初值,指向a,所以指针的值就是变量 a 的地址,*p

23、 的值就是 a 的值。28.下列字符串中,正确的 C+标识符是( )。(分数:2.00)A.foo-1B.2bC.newD.-256 解析:解析:此题考查的是标识符。标识符是由数字、字母以及下划线构成,其第一个字符必须是字母或下划线,中间不能有空格;标识符的长度是任意的,但由于编译系统的限制一般不超过 31 个字符;标识符中的大小写字母是不同的;定义标识符时不能采用系统的保留字。29.内部格式控制操作函数是在头文件( )中定义的。(分数:2.00)A.iostreamhB.iomaniph C.istreamhD.ostreamh解析:解析:C+语言中,除了 ios 类成员函数之外,还提供了另

24、一种 IO 格式化方法,即操作符。所有不带形参的操作符都定义在 iostreamh 中,而带形参的操作符则定义在头文件 iomaniph 中。30.执行语句: coutsetfill(*)setw(10)setfill(#)left123OKendl;return 0;后将输出( )。(分数:2.00)A.123*OKB.123#OK C.123*OK*D.123#OK#解析:解析:toutfill()用于设置或返回输出盼填充字符,默认是空格,fill()函数的设置一直有效,直到下一个 fill()函数改变该值为止。setw(int n)作用是设置输入输出的宽度,此设置只对一次输入或输出有效,

25、在完成一次数据的输入或输出后,宽度设置自动恢复为 0。注意:默认为输出数据在指定宽度内右对齐。31.下列对模板的声明中,正确的是( )。(分数:2.00)A.templateTB.templateclass T1T2C.templateclass T1,class T2 D.templateclass T1;class T2解析:解析:声明一个函数模板的格式为:template模板形参表声明函数声明。调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。32.有如下程序: #includeiostrcam using namespace

26、 std; class AA int n; public: AA(int k):n(k) int get() return n; int get()constreturn n+1; ; int main() AA a(5); const AA b(6); coutaget()bget() return 0: 执行后的输出结果是( )。(分数:2.00)A.55B.57 C.75D.77解析:解析:语句 AA a(5)调用的是 AA(int k):n(k),aget()调用 intget()return;,结果会输出 5;而常对象 constAAb(6),bget()调用的是 intget()c

27、onstreturnn+1:,会输出结果 7。33.关于函数重载,下列叙述中错误的是( )。(分数:2.00)A.重载函数的函数名必须相同B.重载函数必须在参数个数或类型上有所不同C.重载函数的返回值类型必须相同 D.重载函数的函数体可以有所不同解析:解析:所谓函数重载是指同一函数名可以对应多个函数实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。但函数的返回类型不能作为判断重载的依据。34.以下程序的执行结果为( )。 #includeiostreamh class Sample int n: public: Sample(int i)n=i; operator+()n

28、+; 前缀重载运算符 operator+(int)n+=2; 后缀重载运算符 void disp() coutn=nendl: ; void main() Sample A(2),B(2);A+; +B: adisp(); bdisp(); (分数:2.00)A.n=4 n=3 B.n=1 n=2C.n=3 n=4D.n=5 n=6解析:解析:此题考查的是“+”运算符的重载。为了区分前缀和后缀运算符,规定:重载后缀运算符时必须多一个虚拟参数:int。本题中,A(2)首先给 n 赋值 2,语句 A+,调用的是后缀运算符重载语句,使得 n 加 2 变为 4。B(2)首先给 n 赋值 2,然后语句+

29、B,调用前缀运算符重载函数,使得 n 加 1。因此最终的输出结果是 n=4 n=3。35.重载输入流运算符“”必须使用的原型为( )。(分数:2.00)A.istream&operator(istream&,类名&); B.istream&operator(istream,类名);C.istream operator(istream,类名);D.类名operator(istream&,类名&);解析:解析:C+流的输入运算符“”和输出运算符“”只能作为非成员函数重载。重载输入流运算符“”须使用以下原型:istream operator(istream&,类名&);。36.运算符函数调用格式的表

30、达式“yx+”与表达式“yoperator(operator+(x,0)”的含义相同,由此可看出( )。(分数:2.00)A.“”和“+”都是作为成员函数重载的B.“”和“+”都是作为非成员函数重载的C.“”是作为成员函数重载的,“+”是作为非成员函数重载的 D.“”是作为非成员函数重载的,“+”都是作为成员函数重载的解析:解析:运算符函数有两种调用形式,第一种是像一般函数那样用函数名调用,即 yoperator*(z)或者 operator*(y,z);另一种是通过运算符构成表达式,即 y*z。因为“+”运算符既可以作为前缀运算符,又可以作为后缀运算符,所以重载这个运算符时,重载后缀“+”时

31、必须多一个虚拟参数:int。37.派生类的构造函数的成员初始化列表中,不能包含( )。(分数:2.00)A.基类的构造函数B.派生类中子对象的初始化C.基类中子对象的初始化 D.派生类中一般数据成员的初始化解析:解析:在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类的构造函数使基类的数据成员得以初始化。如果派生类中还有子对象,还应包含对子对象初始化的构造函数。38.在下面的类定义中,横线处应填入的内容是( )。 class Fred public: void print()coutdataendl;) void setData(double d) data=d;

32、static int count; private: double data; ; count=0; 静态数据成员的定义(分数:2.00)A.intB.static intC.int Fred: D.static int Fred:解析:解析:此题考查的是静态数据成员的定义。题目中 count 数据成员要定义成静态的,其初始化的格式为:类型类名:静态数据成员=常量。39.下列关于 this 指针的叙述中,正确的是( )。(分数:2.00)A.任何与类相关的函数都有 this 指针B.类的成员函数都有 this 指针C.类的友元函数都有 this 指针D.类的非静态成员函数才有 this 指针

33、解析:解析:此题考查的是 this 指针的使用。类的每一个非静态成员函数都有一个隐含的常量指针,即this 指针。类的静态成员函数不能含有 this 指针,因为 this 指针是一个指向本对象的指针。40.下列情况中,不会调用拷贝构造函数的是( )。(分数:2.00)A.用一个对象去初始化同一类的另一个新对象时B.将类的一个对象赋值给该类的另一个对象时 C.函数的形参是类的对象,调用函数进行形参和实参结合时D.函数的返回值是类的对象,函数执行返回调用时解析:解析:此题考查的是复制构造函数的概念。用一个已知的对象初始化一个正在创建的同类对象时,就会发生复制构造函数。因此,选项 A、C、D 均会调

34、用复制构造函数,而只有选项 B 没有创建的动作,不调用复制构造函数。二、基本操作题(总题数:1,分数:2.00)41.使用 VC6 打开考生文件夹下的源程序文件 modi1clap,该程序运行时有错误,请改正错误,使得程序输出: Hello test 注意:不要改动 main 函数,不能增行或删行,也不能更改程序的结构,错误的语句在*error*的下面。#includeiostream*error*templateTvoid fun(T t) std:coutteststd:endl;*error*templateboolvoid fun(bool t) std:cout(t?Hello:Hi

35、)std:endl;int main() *error* bool flag=TRUE; fun(flag);fun(int)flag); return 0;(分数:2.00)_正确答案:(正确答案:(1)templateclassT (2)删除 templatebool (3)bool nag=true;)解析:解析:(1)C+中的模板类格式为 templateclass T,所以将题目中程序中的第 1 个标识下语句“templateT”修改为“templateclass T”。 (2)在第 2 个标识下的“void fun(bool t)”函数中,其中 t 变量为布尔型变量,是 C+中的基

36、础变量,并不是模板变量,并没有使用到模板类,所以删除第 2 个标识下的模板类型定义语句。 (3)第 3 个标识下的“bool flag=TRUE;”是声明布尔型变量flag,并将其值赋为逻辑真。而 TRUE 并不是合法值,C+中区分大小写,所以逻辑真值应为 tnle,即“bool flag=true;”。三、简单应用题(总题数:1,分数:2.00)42.使用 VC6 打开考生文件夹下的源程序文件 modi2cpp。请完成函数 fun(int x),该函数功能是将 x 的值转换成二进制数输出到屏幕,并且在函数中调用写函数 WriteFile()将结果输出到 modi2txt 文件中。例如:x=1

37、3,13 的二进制数字为 1101,则输出到屏幕的为 1101。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。#includeiostream#includefstream#includecmathusing namespace std;void WriteFile(char*str) orstream out1; out1open(modi2txt“,ios_base:binaryios_base:app); for(int i=0;stri!=0;i+) out1put(stri); out1close(); void ftm(int x) void Clear

38、File() ofstream out1; out1open(modi2:txt); out1close(); intmain() ClearFile(); fun(13); return 0;(分数:2.00)_正确答案:(正确答案:char str32; inti; for(i=30;i=0;i-) 计算二进制 if(x2)stri=1; 求余,如果余不为零字符串 str 第 i 位为 1 else stri=0; 否则为 0 x=1: if(!x)break; str31=0; 串加尾符 cout&striendl; WriteFile(&stri);)解析:解析:(1)定义存放二进制的

39、字符串 str。 (2)然后利用 for 循环对十进制数字 x 进行取余运算,直到余数为 0 结束。 (3)如果取余结果为 0,则二进制字符串这个字符位的值为 0,否则为 1。 (4)最后调用 WriteFile 将运算结果存入文件。四、综合应用题(总题数:1,分数:2.00)43.使用 VC6 打开考生文件夹下的源程序文件 modi3cpp。通过继承完成输入到屏幕指定的信息; TestClassA TestClassB TestClassC 其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。 (1)完成类 B 虚继承于 A,请在注释*1*后添加适当的语句。 (2)完成类 C 虚继

40、承于 A,请在注释*2*后添加适当的语句。 (3)完成类 D 继承于 B,C,请在注释*3*后添加适当的语句。 (4)函数 fun 通过调用基类的 fun,完成所输出的内容,请在注释*4*后添加适当的语句。 注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#includeiostreamhclass TestClassApublic: void fun() coutTestClassAendl; ;*1*class TestClassBpublic: void fun() coutTestClassBendl; ;*2*class TestClassCpubli

41、c: void fun() coutTestClassCendl; ;*3*clasS TestClassDpublic: void fun() *4* ;void main() TestClassD test; testfun(); return;(分数:2.00)_正确答案:(正确答案:(1)将“class TestClassB:”补充完整为:class TestClassB:virtual public TestClassA (2)将“class TestClassC:”补充完整为:class TestClassC:virtual public TestClassA (3)将“class

42、 TestClassD:”补充完整为:class TestClassD:public TestClassB,public TestClassC (4)添功语句:TestClassA:fun();TestClassB:fun();TestClassC:fun();)解析:解析:(1)题目 1 要求“完成类 B 虚继承于 A”。在 C+中,声明虚基类的一般形式为:class 派生类名:virtual 继承方式基类名,由题目知道 TostClassA 为基类,TestClassB 为派生类,所以第 1 个标识下修改为“class TestClassB:virtual public TestClass

43、A”。 (2)同(1),题目 2 和题目 3 中要求的标识 2 和 3 下的语句修改为“class TestClassC:virtual public TestClassA”和“class TestClassD:public TestCtassB,public TestClassC”。 (3)题目 4 要求“函数 fun 通过调用基类的fun,完成所输出的内容”。在 C+中调用基类的成员函数,要使用作用域限定符“:”,类名 A:函数 fun,就是调用类 A 的函数 fun,根据题目中的要求补全对类 TestClassA、TestClassB 以及TestClassC 中的 fun 函数,即“TestClassA:fun();TestClassB:fun();TestClassC:fun();”。

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1