作者Arashinoon (阿辣洗)
看板NTUE-CS102
標題[閒聊] 淺談繼承
時間Sat May 1 00:52:11 2010
說好是淺談了
給阿泰看看
在類別中(Class)
通常都會宣告幾個成員(Menber)
而成員中如果在其他類別裡面也重複出現
其實可以讓他們做一個 繼承動作 讓這個成員可以不用重複宣告
EX 這次作業的 賭博遊戲 撲克牌 骰子
他們都有一個共同的成員 積分(Score)
-
如果要把他們個別宣告就會重複三次
Class gamble Class poker Class dice
{ { {
int score; int score; int score;
public: public: public:
void sets(int Score) void sets(int Score) void sets(int Score)
{ { {
score = Score; score = Score; score = Score;
} } }
.. .. ..
.... .... ....
} } }
像這樣 都會用到 set get函式 還有 score 成員
何不讓他們成為一種繼承關係 讓他們可以共用同一個宣告
-
繼承關係又分三種
老爸宣告的成員
public protected private
↓兒子依照繼承方式不同 繼承的狀況
public public protected 無法直接存取
protected protected protected 無法直接存取
private private private 無法直接存取
這課本裡都有
順便在這邊複習一下類別內 成員的宣告 與存取權限的這個部份
public : 類別內、類別外(主程式、函式等)皆可存取變更
protected : 類別內可存取變更、類別外不可
private : 類別內可存取變更、類別外不可
-
在這邊解釋一下 類別內外的意思
當你讀取這個成員的時候
是看呼叫的地方 是在類別內 還是 類別外
如果在 int main() 裡面呼叫 private 就是類別外了
這時候無法存取
如果在 class : sets() 裡面呼叫 private 就是在類別內
此時可以存取 變更
另外
繼承的時候 為何父類別的 private 成員 無法直接存取呢 ?
-
┌───────┐
│ 兒 ┌───┤
│ │老 │
│ 子 │ 爸 │
└───┴───┘
繼承的時候 如果有去列印出他們兩個的空間大小
就會發現 宣告兒子類別的時候
除了兒子內的成員外 會再加上老爸的成員空間
因此兒子想要直接讀取在老爸類別內的 private 成員是不可行的
只能利用在老爸 public 的設定函式、回傳函式來進行存取變更
大概就這樣 都說是淺談了沒講很深 有錯請指正
-
--
標題: Re: [公告]面對一下
威葛格表示:我崩潰了...
推 WAYS22275:所以PO這篇文章讓你覺得? 04/01 14:54
推 WAYS22275:新奇 溫馨 誇張 難過 實用 高興 無聊 生氣 伯溫 04/01 15:00
推 brightevil:伯溫>///< 04/01 16:12
推 t3603129:= = 04/01 17:08
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.127.36.135
推 gcobc12632:ㄎ 05/01 00:54
→ Arashinoon:阿泰有沒有懂一點阿 我跟你同本的 你應該知道 05/01 00:55
推 j2612280:Good~ 05/01 00:55
推 ip3311:幹嘛謙虛說淺談XD 就直接說 [影片]阿辣洗嫩教C++ 05/01 00:59
→ Arashinoon:哪來影片 ㄍㄟ校 05/01 01:00
推 ip3311:做成PTT動畫呀 啾咪^.< 保證會被推爆 05/01 01:03
推 gcobc12632:阿辣表示: 05/01 01:03
推 j2612280: 小case!! 05/01 01:10
→ s86186654418:member 05/01 16:20