覆蓋虛擬方法時,我注意到當我在可見性中犯了一個錯誤(作爲公共方法重寫的受保護的方法)時,編譯器沒有提醒我。如何在覆蓋具有錯誤可視性的虛擬方法時發出警告
它是有效的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();
}
我試着用gcc和鏗鏘編譯,與-Wall -Wextra,沒有運氣。 我在這段代碼上運行了CppCheck,仍然沒有運氣。
什麼工具可以幫助我檢測到這一點? 我需要修復正在處理的庫的所有來源。
好不是一個錯誤。正如問題所述,我承認這是完全有效的C++。通常情況下,這不是我想要的,因爲我揭露了一些不應該暴露的東西。 – Julien
是的,這不是一個錯誤。這只是語言允許你寫的東西,儘管這可能不是作者的意圖。這是假設的「告訴我,如果我的意思是別的」警告,我想。誰知道呢,也許有些情況下,你確實想要一個知道派生類型的人可以訪問的函數,但是不知道只知道基類型的人。 –
這是一個很好的問題。 –