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

admin2015-05-30  21

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

选项

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

最新回复(0)