使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为: 10 6 30 2 2 注意:错误的语句在//******error******的下面,

admin2019-01-19  27

问题 使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:
    10
    6
    30
    2
    2
    注意:错误的语句在//******error******的下面,修改该语句即可。
1  #include<iostream.h>
2  class CMyClass
3  {
4  private:
5    int number;
6    int Add(int i)
7    {
8    return number+=i;
9    }
10    int Sub(int i)
11    {
12    return number-=i;
13    }
14    int Mul(int i)
15    {
16    return number*=i;
17    }
18    int Div(int i)
19    {
20    if(i!=0)
21    {
22    return number/=i;
23    }
24    else
25    return number;
26    }
27    //******error******
28    typedef int(FUNC)(int);
29    //******error******
30    FUNC func[];
31  public:
32    CMyClass()
33    {
34    func[0]=CMyClass::Add;
35    func[1]=CMyClass::Sub;
36    func[2]=CMyClass::Mul;
37    func[3]=CMyClass::Div;
38    number=0;
39    }
40    int CallFunction(int i,int j)
41    {
42    //******error******
43    return(func)(j);
44    }
45  };
46  void main()
47  {
48    CMyClass myobj;
49    cout<<myobj.CallFunction(0,10)<<end1;
50    cout<<myobj.CallFunction(1,4)<<end1;
51    cout<<myobj.CallFunction(2,5)<<end1;
52    cout<<myobj.CallFunction(3,15)<<end1;
53    cout<<myobj.CallFunction(3,0)<<end1;
54  }

选项

答案(1)typedef int(CMyClass::*FUNC)(int); (2)FUNC func[4]; (3)return (this->*func[i])(j);

解析 CMyClass类有一个成员变量number,多个成员函数分别实现加减乘除功能。使用typedef定义了一个返回值是整型并带有一个整型参数的函数指针,并通过实例化一个容量为4的函数指针数组实现对类中定义的方法的调用。
    (1)在类中定义函数指针须指定类名及指针定义运算符木,因此第1个标识下函数指针正确的定义为“typedefint(CMyClass::*FUNC)(int);”。
    (2)函数指针数组本身是数组类型,因此在定义时如果没有初始化,就必须指定数组大小,在本题中因为指针数组包含的指针变量需要指向四种算数运算,因此定义指针数组大小为4,即第2个标识下应改为“FUNC func[4];”。
    (3)func是指针数组,因此访问的时候需要有指针运算符“*”,第3个标识下应改成“return(this->*func)(j);”。
转载请注明原文地址:https://jikaoti.com/ti/C2t0FFFM
0

最新回复(0)