CPPDepend检测虚拟功能使用情况

时间:2015-03-09 09:18:40

标签: cppdepend

我对CPPDepend检测虚拟功能使用的能力有轻微问题。请考虑以下情形。两个类,CParentClass和CChildClass,其中CChildClass派生自CParentClass。 CParentClass有一个虚函数Test和CChildClass会覆盖Test的基类版本。

在使用方面,出于各种原因,我想做以下事情: -

CChildClass * pMyChild = new CChildClass();
CParentClass * pParentClass = (CParentClass*)pMyChild;
int B = pParentClass->Test();
delete pParentClass; 

这样可以根据需要调用pMyChild的Test函数,但CPPDepend没有检测到这一点,并声称从未到达过该代码。如果我添加单词" virtual"到CChildClass中的Test函数头(除了已经在CParentClass中的那个)之后,CPPDepend声称一切正常。

任何人都可以为我解释这一点,因为我觉得我应该将虚拟放在派生类函数以及基类函数中是错误的。

在派生类中使用CDialog析构函数可以看到类似的问题。如果没有派生类析构函数声明中的虚拟,CPPDepend会抱怨。

感谢您提供任何帮助。

此致

尼尔。

1 个答案:

答案 0 :(得分:1)

CppDepend执行静态分析而不是动态分析,并从静态角度给出依赖关系,它更有趣。实际上,重要的是与设计选择相关的依赖关系,例如在您的情况下,对象被声明为CParentClass,因此该方法与CParentClass的契约相结合,并且在运行时它可以从子类调用方法。