Re: [問題] 關於繼承的問題
看板C_and_CPP (C/C++)作者LPH66 ((short)(-15074))時間16年前 (2009/05/22 16:57)推噓1(1推 0噓 2→)留言3則, 1人參與討論串4/7 (看更多)
※ 引述《Ericcccc (Juan)》之銘言:
: 我剛剛試了在QQ()裡面寫cout << "num = " << num << endl;
: 這樣反而可以印的出來,所以說protected的data member跟member function
: 被呼叫的方法其實不是一樣的?如果是data member可以直接在Cccc存取,
: 而如果是function的話,則必須要像QQ大 所講的,用member fuction呼叫他才能使用
: 是這樣嗎?是這樣的話我就瞭解了,只是覺得好怪喔~~ 謝謝你的回答:)
這些個修飾子是在講所謂 visibility
就是該 class 外面可不可以看得到這個東西
public → 外面看得到
private → 外面看不到,繼承我的人也不會有
protected → 外面看不到,但繼承我的人會有
class 裡面的話 反正是我家 我要找誰就找誰 不關外面的事
所以在 class 裡面和這些東西就都沒有關係
以你的例子
Caaa::show 是 public 所以我們可以在 class 外面 (例如 main) 這樣寫:
Caaa testA;
testA.show(); //OK
Cbbb::show 繼承了 Caaa::show
但是因為是 protected 繼承
所以 Cbbb::show 變成了 protected
Cccc::show 再繼承下來
雖然是 public 繼承
不過 Cbbb::show 是 protected 所以 Cccc::show 也會是 protected
所以這樣寫的話
Cccc testC;
testC.show(); //error, 因為 Cccc::show 是 protected
QQ29 所加的 Cccc::QQ 是 public 所以外面看得到它
而 Cccc::QQ 是 Cccc 的 member 所以它一定可以找得到同屬於 Cccc 的 Cccc::show
不論它是public/private/protected
於是這樣就變成了在 Cccc
我們要經過負責和外面接觸(public)的 Cccc::QQ
來呼叫躲在裡面(private/protected)的 Cccc::show
Caaa::num 也是一路這樣繼承下來的
只是它一開始就是 protected 所以一路繼承下來之後也依然是 protected
以上這些全部和它是 member variable 還是 member function 完全無關
你試著在你的 main 寫上 cout<<c.num<<endl; 一樣會有問題
這就和你在 main 寫 c.show(); 會出問題是一樣的
--
実琴:「河野!你真的就這樣被物質慾望給吸引過去了嗎?!」
亨:「只要穿著女裝擺出親切的樣子,所有必要花費就能全免,似乎一點都不壞啊。」
実琴:「難道你沒有男人的尊嚴了嗎?!」
亨:(斷然道)「沒有。在節衣縮食且生活吃緊的學生面前,沒有那種東西。」
--プリンセス・プリンセス 第二話
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.250.80
推
05/22 17:47, , 1F
05/22 17:47, 1F
→
05/22 17:48, , 2F
05/22 17:48, 2F
→
05/22 17:48, , 3F
05/22 17:48, 3F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章