vptr索引应显示所有虚拟功能,但在我的情况下,仅显示3个虚拟功能中的2个。
我在下面提供了完整的代码和屏幕截图:-
ClassHeader.h
#include <iostream>
using namespace std;
// Employee Class
class Employee
{
public :
int salary ;
Employee(){cout << "Inside CTOR" << endl;}
virtual ~Employee() {cout << "Inside DTOR" << endl;}
virtual void pay(){cout << "Employee" << endl;}
};
// Manager Class
class Manager : public Employee
{
public :
virtual void pay(){cout<< "Manager pay" << endl;}
virtual void Rank(){cout << "Manager Rank" << endl;}
};
// JuniorManager Class
class JuniorManager : public Manager
{
public :
virtual void pay(){cout<< "JuniorManager pay" << endl;}
virtual void Rank(){cout << "JuniorManager Rank" << endl;}
};
Main.cpp
#include "ClassHeader.h"
void main()
{
Manager *p = new Manager();
p->pay();
p->Rank();
p = new JuniorManager();
p->Rank();
Employee *pE = dynamic_cast<Employee*>(p);
pE->pay();
}
Manager类具有两个虚拟功能,即pay和Rank,但是只有pay显示在vptr中。
有人可以告诉我,为什么Rank不出现,即使它具有虚拟功能。
我正在Windows 7 64位上使用Visual Studio 2008和最新更新。
JuniorManager调试器屏幕快照
它也不显示虚拟功能。请参见下图。
最佳答案
如果您以雇员的身份检查该类,则由于该类没有Rank(),因此不会在vtable中显示Rank()。屏幕快照显示了Employee类的内容。
http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/23d4e48e-520e-45b4-8c2f-65c11946d75d
关于c++ - 虚拟功能未在vptr中列出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9166557/