使用VC6打开考生文件夹下的源程序文件modi1.clap,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为: TestClass1 TestClass2 注意:不要改动main函数,不能增行或删行,也不能

admin2018-10-23  43

问题 使用VC6打开考生文件夹下的源程序文件modi1.clap,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为:
    TestClass1
    TestClass2
    注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。
1  #include<iostream.h>
2 #include<assert.h>
3  struct TestClass0
4  {
5   //********error********
6    virtual void fun();
7  };
8  class TestClass1:public TestClass 0
9  {
10    void fun()
11   {
12    cout<<’’TestClass1’’<<end1;
13    }
14  };
15  class TestClass2:public TestClass0
16  {
17    void fun()
18    {
19    cout<<’’TestClass2’’<<end1;
20    }
21  };
22  void main()
23  {
24    TestClass0* p;
25    TestClass1 obj1;
26    TestClass2 obj2;
27    //********error********
28    p=*obj1;
29    p->fun();
30    //********error********
31    p=*obj2;
32    p->fun();
33    return;
34  }

选项

答案(1)virtual void fun()=0; (2)p=&obj1; (3)p=&obj2;

解析 本题程序中的功能为输出字符串TestClass1和TestClass2。从已定源程序的main主函数开始入手,通过定义的类,实现题目中要求的输出结果。
    (1)如果在基类中并不使用这个虚函数,其返回值也是没有意义的,它应该被定义为纯虚函数。所以虚函数fun()应该是纯虚函数,也就是声明虚函数的时候初始化为0的函数。即第1个标识下的“virtual void fun()=0;”。
    (2)第2个标识下的p为指针变量,将对象obj1赋值给p,实际上是p指向对象obj1的地址,所以“p=*obj1;”修改为“p=&obj1;”
    (3)第3个标识下的“p=*obj2;”语句同(2),修改为“p=&obj2;”。
转载请注明原文地址:https://kaotiyun.com/show/O5Ap777K
0

最新回复(0)