2012-08-08 57 views
1

請給我一個具體的答案,爲什麼函數重寫隱藏了在基類中重載的函數。爲什麼函數重載隱藏函數重載在基類中

class Base{ 
public: 
    fun(int,int); 
    fun(B); 
}; 
class Derived:public Base 
{ 
public: 
fun(); 
}; 

int main() 
{ 
Derived d; 
d.fun(1,2); // error 
return 0; 
} 
+0

我可以知道上面的類中重寫的方法在哪裏?我只能看到重載的方法。 – Abhineet 2012-08-08 14:15:35

+0

我在C#中試過這個,它並沒有隱藏底部的兩個fun()方法。 – 2012-08-08 14:21:01

回答

2

TTBOMK這並沒有一個真正的技術原因,它只是Stroustrup的,創造的語言時,認爲這是更好的默認值。 (在此是類似於右值不隱式綁定到非const引用的規則)

您可以輕鬆地解決它明確地把基類的版本到派生類的範圍:

class Base { 
public: 
    void fun(int,int); 
    void fun(Base); 
}; 

class Derived : public Base { 
public: 
    using Base::fun; 
    void fun(); 
}; 

另請參閱WHY鏈接,它說明爲什麼基類重載方法隱藏在派生類中:WHY