Re: [問題] 請問Overriding 是否只能override父 Cl …
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章