【发布时间】:2014-07-14 21:49:27
【问题描述】:
假设我们有如下三个函数:
int fun1()
{
cout<<"inside fun1"<<endl;
}
int fun2()
{
cout<<"inside fun2"<<endl;
}
int fun3(int i)
{
cout<<"inside fun3"<<endl;
}
然后我可以声明指向函数的指针数组,用于访问前两个函数,如下所示:
int (*p[2])() = {fun1, fun2};
for (int i=0;i<2;++i)
{
p[i]();
}
当上述函数在基类 B 中声明为虚拟时,我对声明和访问机制感到好奇。有人可以向我解释一下函数指针是如何存储在指针数组中的,以及如何使用指针。
【问题讨论】:
-
你试过说谷歌搜索吗?喜欢this one?您是否发现此类搜索返回的信息缺乏?以什么方式?
-
@n.m. , 感谢您的答复。我无法理解如何声明指针数组的语法,因为第三个函数采用 int 参数,而前两个没有参数。
-
@CppLearner:您不能将第三个函数与 C++ 中的其他函数放在同一个数组中,它们的类型不同。这并不意味着 编译器 不能生成执行类似操作的代码。 vtable(如果这是您的编译器使用的)在语言之外。
-
您是否对pointers to member functions 感兴趣?它们是否是虚拟的并不重要。
-
您可以通过使用不同函数指针的结构体而不是函数指针数组来模拟这种行为。
标签: c++ arrays function-pointers virtual-functions