假設我有以下類:重寫重載方法隱藏了一些重載的
class Base
{
public:
virtual void myMethod()
{
}
virtual void myMethod(int x)
{
}
};
class Derived : public Base
{
};
在這種情況下,下面的代碼編譯就好了。
int main(void)
{
Derived obj;
obj.myMethod();
return (0);
}
當我嘗試覆蓋下面的其中一個myMethod
s時出現問題。
class Derived : public Base
{
public:
virtual void myMethod(int x)
{
}
};
現在的代碼將無法編譯,並給出錯誤:
error C2660: 'Derived::myMethod' : function does not take 0 arguments
我已經覆蓋的重載函數之一,顯然這已經藏了Derived
類另一個。爲了擺脫這個錯誤,我必須覆蓋所有的重載。這違背了我的期望,對我來說似乎不合理。爲什麼此代碼的行爲如此?
該問題可以複製here。
它隱藏*所有*繼承的重載。 – EJP