关于C++ 虚函数问题讨论:有谁能解释这一奇怪的现象:
先直接贴上代码如下:
// =================================================================================
// Online C++ compiler to run C++ program online
#include <iostream>
class cta
{
public:
virtual int test(int n)
{
return n*3;
}
};
class ctb : public cta
{
public:
virtual int test(int n)
{
// return cta::test(n);
return n;
}
};
typedef int (cta::*CTMemProc)(int);
int main()
{
cta a;
ctb b;
CTMemProc mpfA = &cta::test;
CTMemProc mpfB = (CTMemProc)(&ctb::test);
if(mpfA == mpfB)
{
std::cout << "mfpA == mfpB" << std::endl;
}
else
{
std::cout << "mfpA != mfpB" << std::endl;
}
std::cout << "a.test()=" << (a.*mpfA)(2) << std::endl;
std::cout << "a.test()=" << (b.*mpfB)(2) << std::endl;
return 0;
}
// =================================================================================
执行的结果输出如下:
mfpA == mfpB
a.test()=6
a.test()=2
问题, 既然 mfpA 和 mfpB 是相同的,为什么执行了两个不同的函数结果呢, 仅仅只是因为他们的 object 是不同的吗, 但是这个程序跟object无关呀, 只跟函数的入口地址相关呀。
请各位专家帮忙解释一下。
谢谢.