Re: [問題] 請問Overriding 是否只能override父 Cl …

看板Programming作者 (Alien)時間18年前 (2007/06/18 10:52), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/5 (看更多)
※ 引述《sorryChen (陳揚和)》之銘言: : 我試了一下 好像不行(雖然我的用法有點怪怪的 我用Visual C++.net) : Class C 繼承 Class B 繼承 Class A : Class A定義了function f1() f2() : f1()中會Call f2() : 我現在在Class C中define 同名同參數的f2() 假設叫他f2'() : 希望 在call C.A1()時 會自動Call f2'(); 而不是f2(); : 這樣有可能嗎 如果可以其實有點小危險 就是子class不小心Override : 爺爺輩以上的同名程式... (可能不知道爺爺輩以上有什麼method..) : 真是非常感謝版友們的回答阿 ..C++有Virtual..所以確定要下Virtual : 才是真正Overrideing 而不是hiding.. 但是對於爺爺輩以上 : 好像還是不行..(我試的結果.. 應該友其他方法才是 : ※ 引述《horngsh (要公理要正義)》之銘言: : : 不好意思, 你問的是C++, 我以為是C#, 在C++中要覆寫父層以上的方法 : : 只要在衍生類別中用相同的簽名加上方法定義即可 : : (不用再加virtual, 除非你以後還要讓再衍生的類別再覆寫) 不會不行吧? 這種作法在寫 template method 那種 pattern 常會用到 class GrandFather { public: foo() { onFoo(); }; protected: virtual onFoo() { cout << "GrandFather" <<endl; }; } class Father: GrandFather{ } class Child: Father { protected: virtual onFoo() { cout << "Child" << endl; } } GrandFather * grandPa = new Child(); grandPa->foo(); 結果該會是印出 Child 呀... 還沒有測試但你可以拿來修一修試試 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.22.246.26
文章代碼(AID): #16TVDjGW (Programming)
文章代碼(AID): #16TVDjGW (Programming)