[問題] 關於繼承的問題

看板C_and_CPP作者 (Juan)時間16年前 (2009/05/21 15:32), 編輯推噓6(608)
留言14則, 6人參與, 最新討論串1/7 (看更多)
#include <iostream> #include <cstdlib> using namespace std; class Caaa { protected: int num; public: Caaa(){num=5;} }; class Cbbb :protected Caaa {}; class Cccc :public Cbbb { public: void show() { //return num; cout << "num = " << num << endl; } }; int main(void) { Cccc c; c.show(); system("pause"); return 0; } ----------------------------------------- 我是c++新手 有在用c++教學手冊自修 想請問一下裡面習題的一個小問題 就是當我把黃色的那個部份擺在Cbbb/Cccc裡都可以跑 會顯示出 num = 5 為何放在Caaa(public)裡卻不行呢? Cccc c不是public-->protected-->public --------->protected把show()繼承下來嗎? 謝謝指教:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.119.19.39

05/21 23:36, , 1F
protected 繼承會把 public 壓成 protected
05/21 23:36, 1F

05/21 23:52, , 2F
class Cbbb :protected Caaa 改成class Cbbb :public Caaa
05/21 23:52, 2F

05/22 05:04, , 3F
不好意思 為什麼我放在Caaa也是顯示為5
05/22 05:04, 3F

05/22 05:04, , 4F
編譯器的關係嗎
05/22 05:04, 4F

05/22 11:45, , 5F
擺在Caaa怎麼會過呢??
05/22 11:45, 5F

05/22 13:25, , 6F
謝謝1.2F的指教 我還是納悶的是show這個function在Caaa
05/22 13:25, 6F

05/22 13:26, , 7F
裡是public然後到了Cbbb變成protected. Cccc再用public
05/22 13:26, 7F

05/22 13:27, , 8F
繼承他 不是應該會是protected的權限在Cccc裡嗎?為甚麼
05/22 13:27, 8F

05/22 13:28, , 9F
會無法存取他呢?謝謝指教!
05/22 13:28, 9F

05/22 13:44, , 10F
因為show只能被用在 derived class的member function裡面
05/22 13:44, 10F

05/22 13:45, , 11F
你用c.show()當然有error
05/22 13:45, 11F

05/22 13:50, , 12F
照原PO的想法,那public和protected有什麼差?
05/22 13:50, 12F

05/22 15:59, , 13F
我看書後的想法是對base和derive都沒有差 但是protected
05/22 15:59, 13F

05/22 15:59, , 14F
無法在讓derive的下一代做存取 是這樣嗎?
05/22 15:59, 14F
文章代碼(AID): #1A5NFm9M (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1A5NFm9M (C_and_CPP)