A-A+

使用VC6打开考生文件夹下的工程test10_1 此工程包含一个源程序文件test10_1.

2022-08-06 00:44:02 问答库 阅读 174 次

问题详情

使用VC6打开考生文件夹下的工程test10_1,此工程包含一个源程序文件test10_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果为;
class Base
class D1
class D2
class D3
fin Base
源程序文件test10_1.cpp清单如下:
include<iostream.h>
class Base
{
public:
Base(){cout<<"class Base"<<endl;}
void f(){cout<<"f in Base"<<endl;}
};
class D1:virtual public Base
{
public:
D1(){cout<<"class D1"<<endl;}
void f(){cout<<"f in D1"<<endl;}
};
/*********found**********/
class D2:public Base
{
public:
D2(){cout<<"class D2"<<endl;}
/**********found**********/
class D3::public D1,public D2
{
public:
D3(){cout<<"class D3"<<endl;}
};
void main()
{
D3 d;
/**********found************/
d.f();
}请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:(1)错误:class D2:public Base正确:class D2:virtual public Base(2)错误:class D3::public D1public D2正确:class D3:public D1public D2(3)错误:d.f();正确:d.Base::f();
(1)错误:class D2:public Base正确:class D2:virtual public Base(2)错误:class D3::public D1,public D2正确:class D3:public D1,public D2(3)错误:d.f();正确:d.Base::f(); 解析:(1)主要考查考生对虚基类的理解,虚基类可以解决二义性的问题,其定义方式是在继承列表中使用virtual关键字,使用虚基类可以避免程序运行中对基类函数调用的不惟一;
(2)主要考查考生对类的定义方法的掌握,“::”为作用域符,此处应该使用“:”,因为后面是继承列表;
(3)主要考查考生对虚基类函数调用过程的理解,只有使用“:”限定才能访问基类函数,否则将会调用自身的函数,如果该类没有该函数的定义,则会自动调用其父类的该函数,所以必须使用“::”符号。

考点:工程,源程序