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

admin2021-05-06  18

问题 使用VC6打开考生文件夹下的源程序文件modil.epp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:
    10
    6
    30
    2
    2
    注意:错误的语句在//********error********的下面,修改该语句即可。
    1  #include
    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    i
    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<    50    cout<    51    cout<    52    cout<    53    cout<    54    }

选项

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

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

最新回复(0)