0

仮想関数の使用状況を検出する CPPDepend の機能に少し問題があります。次のシナリオを検討してください。CParentClass と CChildClass の 2 つのクラス。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 はすべて問題ないと主張します。

基本クラス関数だけでなく、派生クラス関数にも virtual を配置する必要があるのは間違っていると感じているので、誰かがこれに光を当てることができますか?

同様の問題は、派生クラスの CDialog デストラクタでも見られます。派生クラスのデストラクタ宣言に virtual がない場合、CPPDepend は不平を言います。

ご協力いただきありがとうございます。

よろしく

ニール。

4

1 に答える 1

1

CppDepend は動的ではなく静的な分析を行い、静的な観点から依存関係を提供します。これはより興味深いものです。実際、重要なのは設計の選択に関連する依存関係です。たとえば、あなたの場合、オブジェクトは CParentClass として宣言されているため、メソッドは CParentClass のコントラクトと結合され、実行時に子クラスからメソッドを呼び出すことができます。

于 2015-03-09T22:03:30.780 に答える