0

我对 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 没有检测到这一点,并声称永远不会到达代码。如果我将“虚拟”一词添加到 CChildClass 中的测试函数头(除了已经在 CParentClass 中的那个),那么 CPPDepend 声称一切正常。

任何人都可以为我阐明这一点,因为我应该将 virtual 放在派生类函数和基类函数中感觉不对。

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

谢谢你提供的所有帮助。

问候

尼尔。

4

1 回答 1

1

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

于 2015-03-09T22:03:30.780 回答