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/

10-13 00:06