Re: [問題] 不繼承特定成員的方法?
剛好最近看的書上有提到一個類似原PO問題的解法
所以就回這篇跟大家討論看看...
※ 引述《icetofux ()》之銘言:
: 遇到的問題: (題意請描述清楚)
: 我先建立一個類別A:
: class A
: {
: public:
: Sub1();
: Sub2();
: Sub3();
: };
: 然後在建立一個類別B繼承自類別A:
: class B : public A
: {
: ...
: };
這裡改成
class B: private A
{
public:
using A::Sub1;
}
: 照理說類別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。
: 補充說明:
: 沒有。
這樣對於class B的使用者而言,只看的到Sub1()
而且也可以宣告為virtual使用多型.
至於缺點是使用private繼承失去轉型的能力
例如:
不能A *a = new B();
或是 B* b = new B();
A *a = dynamic_cast<A*>(b);
想請問這樣的方式還有其他優缺點嗎?
或者有其他更好得解法可以達到原po問題
的要求?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.85.208.21
→
07/09 03:59, , 1F
07/09 03:59, 1F
→
07/09 03:59, , 2F
07/09 03:59, 2F
→
07/09 04:00, , 3F
07/09 04:00, 3F
→
07/09 04:01, , 4F
07/09 04:01, 4F
→
07/09 10:00, , 5F
07/09 10:00, 5F
→
07/09 10:00, , 6F
07/09 10:00, 6F
→
07/09 10:02, , 7F
07/09 10:02, 7F
→
07/09 10:02, , 8F
07/09 10:02, 8F
→
07/09 10:03, , 9F
07/09 10:03, 9F
→
07/09 10:04, , 10F
07/09 10:04, 10F
→
07/09 10:04, , 11F
07/09 10:04, 11F
推
07/09 12:48, , 12F
07/09 12:48, 12F
→
07/09 21:01, , 13F
07/09 21:01, 13F
→
07/09 21:01, , 14F
07/09 21:01, 14F
→
07/09 21:02, , 15F
07/09 21:02, 15F
→
07/09 21:03, , 16F
07/09 21:03, 16F
討論串 (同標題文章)