问答题
使用VC6打开
下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:
10
6
30
2
2
注意:错误的语句在//******error******的下面,修改该语句即可。
#include<iostream.h>
class CMyClass
{
private:
int number;
int Add(int i)
{
return number+=i;
}
int Sub(int i)
{
return number-=i;
}
int Mul(int i)
{
return number*=i;
}
int Div(int i)
{
if (i!=0)
{
return number/=i;
}
else
return number;
}
//******error******
typedef int (FUNC) (int);
//******error******
FUNC func[];
public:
CMyClass ()
{
func[0]=CMyClass::Add;
func[1]=CMyClass::Sub;
func[2]=CMyClass::Mul;
func[3]=CMyClass::Div;
number=0;
}
int CallFunction(int i,int j)
{
//******error******
return (func[i]) (j);
}
};
void main ()
{
CMyClass myobj;
cout
<
<
myobj.CallFunction (0,10)
<
<
endl;
cout
<
<
myobj.CallFunction (1, 4)
<
<
endl;
cout
<
<
myobj.CallFunction (2,5)
<
<
endl;
cout
<
<
myobj.CallFunction (3,15)
<
<
endl;
cout
<
<
myobj.CallFunction (3,0)
<
<
endl;
}
【正确答案】
【答案解析】(1)typedef int(CMyClass::*FUNC)(int);
(2)FUNC func[4];
(3)return(this->*func[i])(j);
答案考生文件夹
[解析] CMyClass类有一个成员变量number,多个成员函数分别实现加减乘除功能。使用typedef定义了一个返回值是整型并带有一个整型参数的函数指针,并通过实例化一个容量为4的函数指针数组实现对类中定义的方法的调用。
(1)在类中定义函数指针须指定类名及指针定义运算符*,因此第1个标识下函数指针正确的定义为“typedef int(CMyClass::*FUNC)(int);”。
(2)函数指针数组本身是数组类型,因此在定义时如果没有初始化,就必须指定数组大小,在本题中因为指针数组包含的指针变量需要指向四种算数运算,因此定义指针数组大小为4,即第2个标识下应改为“FUNC func[4];”。
(3)func是指针数组,因此访问的时候需要有指针运算符“*,第3个标识下应改成“return(this->*func[i])(j);”。