【问题标题】:CPPDepend Detection of virtual function usageCPPDepend 检测虚函数使用情况
【发布时间】:2015-03-09 09:18:39
【问题描述】:

我对 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 会报错。

感谢您提供的任何帮助。

问候

尼尔。

【问题讨论】:

    标签: cppdepend


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-22
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 2014-08-06
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多