仮想メソッドをオーバーライドすると、可視性(パブリックメソッドとしてオーバーライドされた保護されたメソッド)を間違えたとき、コンパイラによって警告されません。間違った可視性を持つ仮想メソッドをオーバーライドするときに警告する方法
有効なC++ですが、通常は間違いです。例えば
:
#include <iostream>
class Base
{
protected:
virtual void ProtectedMethod(void)
{
std::cout << "Base::ProtectedMethod" << std::endl;
}
};
class Derived : public Base
{
public:
virtual void ProtectedMethod(void)
{
std::cout << "Derived::ProtectedMethod" << std::endl;
}
};
int main(int, char* [])
{
Derived d;
d.ProtectedMethod();
}
私は運で、-Wall -Wextraで、gccと打ち鳴らすでコンパイルしてみました。 私はこのコードでCppCheckを実行しましたが、まだ運がありません。
これを検出するのに役立つツールはありますか? 私が取り組んでいるライブラリのソースをすべて修正する必要があります。
OKではない間違い。質問に記載されているように、私はそれが完全に有効なC++であることを認めます。通常、それは私が欲しいものではないだけです。露出してはいけないものを公開しているからです。 – Julien
ええ、それは間違いではありません。これは、たとえそれが著者の意図ではないとしても、あなたが書くことができる言語のものです。これは仮説的な "私に何か他の意味があるかどうか教えてください"という警告の1つになります。だれかが知っているのは、派生型を知っている人が関数にアクセスできるようにしたいという状況があるかもしれないが、基本型しか知りません。 –
これは素晴らしい質問です。 –