[問題] 繼承觀念

看板C_and_CPP作者 (Happiness is everything)時間14年前 (2011/10/10 12:52), 編輯推噓1(1021)
留言22則, 6人參與, 最新討論串1/1
最近在複習C++中繼承的觀念 有幾個問題想請教一下大家 假設有一段程式: class Base { public : int data1; private: int data2; }; class Derive : public Base { public : int data1; }; Q.1 請問一下繼承的子類別 Derive裡面的data有: Base::data1 , Derive::data1 , Base::data2 對嗎? 只是如果產生了一個Derive的instance derive 和 一個Base的instance base derive無法利用本身的 member function 去存取base的 data2而已? Q.2 如果Q.1的敘述成立,那derive要如何存取自己內部的data2? Q.3 如果Q.1的敘述不成立,亦即derive裡沒有Base::data2,那是代表子類別不會繼承到父類別 private的資料嗎? 謝謝大家~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.217.26

10/10 15:47, , 1F
(1) 不允許存取。(2) private: -> protected
10/10 15:47, 1F

10/10 15:49, , 2F
10/10 15:49, 2F

10/10 16:01, , 3F
謝謝樓上二位的回答~
10/10 16:01, 3F

10/10 16:03, , 4F
也就是說 Derive裡雖然有Base::data2 但是必須靠它所繼承來
10/10 16:03, 4F

10/10 16:03, , 5F
的父類別中的public 或 protected的function來存取
10/10 16:03, 5F

10/10 16:04, , 6F
而Base::data1則是可以由自己的member function直接存取
10/10 16:04, 6F

10/10 16:06, , 7F

10/10 16:07, , 8F
簡單來說,父親私有的東西,你不能夠去拿,但是可以
10/10 16:07, 8F

10/10 16:07, , 9F
問父親要不要給你拿,他同意了,就可以取得
10/10 16:07, 9F

10/10 16:10, , 10F
但是你不應該自行去拿
10/10 16:10, 10F

10/10 16:12, , 11F
感謝回答 我大概懂了
10/10 16:12, 11F

10/10 19:47, , 12F
是的
10/10 19:47, 12F

10/10 22:26, , 13F
剛剛做了一下實驗 發現如果我有兩個instance: Base a 和
10/10 22:26, 13F

10/10 22:28, , 14F
Derive b,b不能存取a的protected部分的data耶
10/10 22:28, 14F

10/10 22:29, , 15F
意思是說 b只能存取自己所繼承來的Base::(protected data)
10/10 22:29, 15F

10/10 22:30, , 16F
嗎? 不過如果有兩個Base instance A1&A2 彼此可以存取對方的
10/10 22:30, 16F

10/10 22:30, , 17F
private資料
10/10 22:30, 17F

10/11 01:54, , 18F
不曉得我上面這樣講對不對?
10/11 01:54, 18F

10/11 19:59, , 19F
yes 但如果有兩個Derive b1,b2 可以互相存取彼此Base部份
10/11 19:59, 19F

10/11 22:06, , 20F
感謝樓上的回答~!!
10/11 22:06, 20F

10/12 10:02, , 21F
既然想玩繼承.養成base要加上virtual destructor
10/12 10:02, 21F

10/12 10:02, , 22F
即使這只是個例子
10/12 10:02, 22F
文章代碼(AID): #1EadeLKq (C_and_CPP)