Re: [問題] 判斷式中根據物件呼叫方法

看板C_and_CPP作者 (我要加入劍道社!)時間13年前 (2012/03/02 02:14), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《elfkiller (沒有暱稱)》之銘言: : 各位大大好 : 我現在遇到一個設計上的問題: : 1. A,C 繼承 P; B 繼承 A; D 繼承 C : 2. A,B中有方法 ab(); C,D中有方法 cd() : 3. A,B,C,D,P會由同學完成,所以我不能做太大的更動建議,只能做小幅度調整 : 4. P中沒有ab()和cd() : 我現在必須要根據物件類型呼叫方法 : 大概是 : if(A* = new A OK!) : A->ab() : else if(B* = new B OK!) : B->ab() : else if(C* = new C OK!) : C->cd() : else if(D* = new D OK!) : D->cd() : 像這樣代碼重複性很高,不知道有沒有比較好的方法呢? : PS: 實際情況有更多class,A下有數個子類,C下有數個子類 class P { // ... virtual void DoSomething() = 0; }; class A : public P { virtual void ab() { // implement ab() in A } virtual void DoSomething() { ab(); } }; class B : public A { virtual void ab() { // implement ab() in B } // no need to override DoSomething() }; C 和 D 的情況就把 ab() 改成 cd() 我想多宣告一個 virtual function 應該不算太大的更動吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.3.139

03/02 11:42, , 1F
有神快拜<(__)>
03/02 11:42, 1F

03/02 13:50, , 2F
現在才看到超哥已經在推文寫了一樣的方法
03/02 13:50, 2F
文章代碼(AID): #1FK2qNML (C_and_CPP)
文章代碼(AID): #1FK2qNML (C_and_CPP)