看板 C_and_CPP 關於我們 聯絡資訊
http://nopaste.csie.org/ed1c8 原本是想class B裡面寫pulbic 但忘記寫了 可是為什麼還是可以透過 A 的update呼叫到private呢? 難道 class B繼承A 也等同於在class B寫friend claas A;一樣的效力? 還是我誤會了 thx~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.64.222
nowar100:他是virtual 會直接摳B的update() 04/12 12:34
QQ29:這也算是dynamic link吧 this = new B 但為什麼說直接 04/12 12:35
firose:access right 是看 static type 的吧 04/12 12:35
QQ29:至少有些 private public的限制呀 不是不同class嗎 04/12 12:35
QQ29:是dynamic binding 寫錯了~ 04/12 12:40
littleshan:access right 是在 compile time 幫你檢查的 04/12 12:47
QQ29:喔所以實際上compiler以為呼叫A::update? 04/12 12:55
littleshan:當你寫 p->Update() 的時候,p 的型別是 A* 04/12 12:57
littleshan:所以 compiler 當然只能看 A::update 是不是 public 04/12 12:58
nowar100:soka 所以我的觀念錯了 Orz 04/12 13:35
QQ29:那進去函式裡面 this也是A* 所以也是檢察 A::update是否為pub 04/12 13:52
QQ29:lic嗎? 04/12 13:52
LPH66:你的"進去函式裡面"是指? 04/12 13:55
※ 編輯: QQ29 來自: 219.87.64.222 (04/12 13:59)
QQ29:抱歉我貼錯連結了orz剛才發現 改了一下 我指的是p->A::update 04/12 13:59
QQ29:進去後會呼叫到B::update~ 04/12 14:00
QQ29:原來這網頁 refine後 網址會變= = 抱歉剛沒注意到 04/12 14:01
littleshan:你寫 p->A::update() 當然是呼叫 A 的 update() 04/12 15:12
littleshan:至於你說的呼叫到 B::update 是因為你多寫了一行 04/12 15:13
QQ29:恩我故意這樣 ~會呼叫到B::是因為this是=new B吧? 04/12 15:54
QQ29:原本不知道為啥可以存取private 但想成compile time檢查就 04/12 15:55
QQ29:通了~ 04/12 15:55