今天突然想到关于虚函数一个问题:
// 1.h
Class A
{
public:
virtual void print();
};
class B:public A
{
public:
virtual void print();
};
// 1.cpp
#include "stdafx.h"
#include "1.h"
void A::print()
{
cout<<"base class!"<<endl;
}
void B::print()
{
A::print(); // c1
cout<<"inherited class!"<<endl;
}
// primary file.
#include "stdafx.h"
#include "1.h"
int _tmain(int argc, _TCHAR* argv[])
{
A a;
B b;
a.print();
b.print();
return 0;
}
运行结果为:
base class!
base class!
inherited class!
结果类似于C#中的机制。而将c1处分别改为以下各部分结果又各为:
(c1)修改处 结果
B::print(); 出现堆栈溢出(调试时)或base class!(运行时)
print(); 出现堆栈溢出 (调试时)或base class!(运行时)
结果出乎意料!虚函数表又是怎样的对这一过程处理的呢?
有谁有雷神大哥的QQ号或MSDN望告知本人一下!