Re: [問題] 關於繼承的問題

看板C_and_CPP (C/C++)作者 ((short)(-15074))時間16年前 (2009/05/22 16:57), 編輯推噓1(102)
留言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
class裡面跟外面(main)的關係 這樣一來我終於弄懂了:D
05/22 17:48, 2F

05/22 17:48, , 3F
感激不盡!!
05/22 17:48, 3F
文章代碼(AID): #1A5cZwQd (C_and_CPP)
文章代碼(AID): #1A5cZwQd (C_and_CPP)