使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正其中的错误,使程序正确运行。并且使程序输出的结果为: OK 注意:错误的语句在//******error******的下面,修改该语句即可。 1 #inc

admin2019-05-14  12

问题 使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正其中的错误,使程序正确运行。并且使程序输出的结果为:
    OK
    注意:错误的语句在//******error******的下面,修改该语句即可。
1  #include<iostream.h>
2  class CBase
3  {
4  public:
5    CBase()
6    {
7    a=b=0;
8    }
9  private:
10    int a,b;
11  };
12  class CDerive1:public CBase
13  {
14  public:
15    CDerivel()
16    {
17    }
18    //******error******
19    virtual void func();
20  };
21  class CDerive2:public CDerive1
22  {
23  public:
24    CDerive2()
25    {
26    a=0;
27    b=0;
28    }
29    void func()
30    {
31    //******error******
32    cout<<’’OK’’<end1;
33    }
34  private:
35    int a;
36    int b;
37  };
38  void main()
39  {
40    CDerive2 obj;
41    //******error******
42    CDerive1  *p  =(CDerivel*)obj;
43    p->func();
44  }

选项

答案(1)virtual void func()=0; (2)cout<<’’OK’’<<end1; (3)CDerivel *p=(CDerive1 *) &obj;

解析 程序中定义了类CBase、CDerive1和CDerive2,类CDerive1公有派生于类CBase,CDerive2公有派生于类CDerive1,在类CDerive1中定义了虚函数func(),但是没有给出具体实现,派生类CDerive2中给出了func()函数的具体实现,因此CDerive1类中的func()函数是纯虚函数。
    (1)由审题分析可知,CDerive1类中的func()函数是纯虚函数,纯虚函数的定义格式为:virtual<函数类型><函数名>(<参数表>)=0,因此第1个标识下应为“virtual void func()=0;”。func()函数没有参数表。
    (2)编译程序后发现第2个标识下有错误,cout流中的数据是用流插入运算符“<<”顺序加入的,因此“<”不正确,应改成“cout<<"OK’’<<end1;”。
    (3)函数的调用方式有2种:非多态调用和多态调用,非多态调用是指不使用指针或引用的直接调用,多态调用是指通过对象的指针或引用的调用,在主函数中定义了CDerive1*p,p是指向基类CDerive1的指针,因此是多态调用方式,即通过对象的指针来调用,应该把派生类对象的地址赋给p,而不是对象名,因此第3个标识下应改为“CDerive1 *p=(CDerive1*)&obj;”。
转载请注明原文地址:https://jikaoti.com/ti/CvA0FFFM
0

最新回复(0)