[問題] 不繼承特定成員的方法?

看板C_and_CPP作者時間14年前 (2010/06/17 10:57), 編輯推噓3(308)
留言11則, 5人參與, 最新討論串1/2 (看更多)
遇到的問題: (題意請描述清楚) 我先建立一個類別A: class A { public: Sub1(); Sub2(); Sub3(); }; 然後在建立一個類別B繼承自類別A: class B : public A { ... }; 照理說類別B會繼承到類別A的成員Sub1()、Sub2()、Sub3(),但我希望在使用類別B時, 不該使用到Sub2(),請問除了記在腦袋裡使用類別B時不要去用到成員Sub2(),有沒有辦 法從語法下手,讓我在程式編寫的過程中,如果使用到類別B的Sub2()成員時跳出錯誤訊 息? 希望得到的正確結果: 類別B不繼承類別A的特定成員。 程式跑出來的錯誤結果: 還不知道要怎麼寫所以還沒錯。 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Code::Blocks / Windows 有問題的code: (請善用置底文標色功能) 還不知道要怎麼寫所以還沒有code。 補充說明: 沒有。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.67.181.135

06/17 11:02, , 1F
在 B 中把 Sub2() 給 override 成丟出一個例外如何?
06/17 11:02, 1F

06/17 11:03, , 2F
(雖然這是 runtime 才知道而不是 compile-time 知道就是了)
06/17 11:03, 2F

06/17 11:23, , 3F
如果想要繼承又不能用某些函式, 那麼這樣public繼承就
06/17 11:23, 3F

06/17 11:25, , 4F
不合理了, 應該改用 private 繼承, 然後寫一些函式把
06/17 11:25, 4F

06/17 11:28, , 5F
父類別函式包裝起來, 可以參考design pattern 的 clas
06/17 11:28, 5F

06/17 11:29, , 6F
s adaptor
06/17 11:29, 6F

06/17 11:52, , 7F
public繼承就語意而言是一種"is a"或者"is in terms of"的
06/17 11:52, 7F

06/17 11:53, , 8F
的關係,不應該只有使用有部分介面的情況出現
06/17 11:53, 8F

06/17 13:51, , 9F
把 Sub2() 丟到 private 區段去,繼承上來外面就用不到。
06/17 13:51, 9F

06/17 13:53, , 10F
當然如果你希望用 A 的人可以用 Sub2(),那就得換方法繼承
06/17 13:53, 10F

06/18 13:31, , 11F
也可以重新做一個B的Sub2() 普通呼叫就不會忽叫到Sub2()
06/18 13:31, 11F
文章代碼(AID): #1C6OyQjq (C_and_CPP)
文章代碼(AID): #1C6OyQjq (C_and_CPP)