[問題] 怎麼可以直接access private function?

看板C_and_CPP作者 (我愛阿蓉)時間14年前 (2010/04/12 12:05), 編輯推噓6(6015)
留言21則, 5人參與, 最新討論串1/1
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

04/12 12:34, , 1F
他是virtual 會直接摳B的update()
04/12 12:34, 1F

04/12 12:35, , 2F
這也算是dynamic link吧 this = new B 但為什麼說直接
04/12 12:35, 2F

04/12 12:35, , 3F
access right 是看 static type 的吧
04/12 12:35, 3F

04/12 12:35, , 4F
至少有些 private public的限制呀 不是不同class嗎
04/12 12:35, 4F

04/12 12:40, , 5F
是dynamic binding 寫錯了~
04/12 12:40, 5F

04/12 12:47, , 6F
access right 是在 compile time 幫你檢查的
04/12 12:47, 6F

04/12 12:55, , 7F
喔所以實際上compiler以為呼叫A::update?
04/12 12:55, 7F

04/12 12:57, , 8F
當你寫 p->Update() 的時候,p 的型別是 A*
04/12 12:57, 8F

04/12 12:58, , 9F
所以 compiler 當然只能看 A::update 是不是 public
04/12 12:58, 9F

04/12 13:35, , 10F
soka 所以我的觀念錯了 Orz
04/12 13:35, 10F

04/12 13:52, , 11F
那進去函式裡面 this也是A* 所以也是檢察 A::update是否為pub
04/12 13:52, 11F

04/12 13:52, , 12F
lic嗎?
04/12 13:52, 12F

04/12 13:55, , 13F
你的"進去函式裡面"是指?
04/12 13:55, 13F
※ 編輯: QQ29 來自: 219.87.64.222 (04/12 13:59)

04/12 13:59, , 14F
抱歉我貼錯連結了orz剛才發現 改了一下 我指的是p->A::update
04/12 13:59, 14F

04/12 14:00, , 15F
進去後會呼叫到B::update~
04/12 14:00, 15F

04/12 14:01, , 16F
原來這網頁 refine後 網址會變= = 抱歉剛沒注意到
04/12 14:01, 16F

04/12 15:12, , 17F
你寫 p->A::update() 當然是呼叫 A 的 update()
04/12 15:12, 17F

04/12 15:13, , 18F
至於你說的呼叫到 B::update 是因為你多寫了一行
04/12 15:13, 18F

04/12 15:54, , 19F
恩我故意這樣 ~會呼叫到B::是因為this是=new B吧?
04/12 15:54, 19F

04/12 15:55, , 20F
原本不知道為啥可以存取private 但想成compile time檢查就
04/12 15:55, 20F

04/12 15:55, , 21F
通了~
04/12 15:55, 21F
文章代碼(AID): #1Bmfm6mR (C_and_CPP)