利用周末时间,研究了一下C++中的,指向成员函数指针
定义了两个类一个base, 另一个是derive
class base
{
public:
base(){;}
~base(){;}
virtual void test(void)
{
printf("call test\n");
}
};
class derive
: public base
{
public:
derive(){;}
~derive(){;}
void test(void)
{
printf("call der_class!\n");
}
};
typedef void (base::*pM)(void);
typedef void (derive::*pMM)(void);
调用通过下面主函数:
int main()
{
derive der;
pM pm;
pMM pmm;
pm = &base::test;
pmm = &derive::test;
base *PT = &der;
(PT->*pm)();
(der.*pmm)();
getchar();
return(1);
}
//实际返回的结果都是调用了derive类的test函数。
为什么会这样? (PT->*pm)();因为pm所指的test是虚函数,所以
真正调用的是PT指向的test(),也就是derive::test().
如果去掉base::test()函数的virutal,实际调用就会是base::test()了。
文章评论(0条评论)
登录后参与讨论