2012-03-27 38 views
0

例如,我們有它會使用哪種重載方法?

 BaseClass myBaseObject 
    InheritedClass myInheritedObject 

和2重載方法

 void Do(BaseClass tmp) 
     { DoA();} 
    void Do(InheritedClass tmp) 
     { DoB();} 

什麼會這樣呢?

 Do((BaseClass) myInheritedObject); 

,是其常用的方法把DoA()BaseClass之下,DoB()InheritedClass下並覆蓋DoA(),併合並2 Do()爲1?

 void Do(BaseClass tmp) 
      {return tmp.DoA()} 
+0

因爲參數類型完全對應於它的簽名 – 2012-03-27 11:47:14

+2

爲什麼問你什麼時候可以在你的編譯器中檢查自己,在相同的時間內寫出這個問題? – 2012-03-27 11:47:20

+0

這是一個謎語還是一個問題? – 2012-03-27 11:47:48

回答

2

第一 - 第二過載是不適用的,因爲自變量的編譯時類型是BaseClass代替InheritedClass,而且也沒有隱式轉換從BaseClassInheritedClass

+0

所以Do(myInheritedObject)會調用DoB()? – colinfang 2012-03-27 11:53:58

+0

@colinfang:是的,假設'myInheritedObject'的*編譯時類型*是'InheritedClass'。當然,你可以很容易地嘗試這個。 – 2012-03-27 11:55:35

+0

thx,我的問題現在成爲解決這個問題,你可以幫忙看一下嗎? http://stackoverflow.com/questions/9892660/how-to-improve-this-method-using-polymorphismoverloading-so-as-to-reduce-is-ty – colinfang 2012-03-27 17:02:19