誰(shuí)能幫忙解釋一下下邊注釋的地方為什么錯(cuò)誤?糾結(jié)很長(zhǎng)時(shí)間了,這是c++ primer上的一道題。struct Base{ foo(int);protected: int bar; double foo_bar;};struct Derived : public Base{ foo(string); bool bar(Base *pb); void foobar();protected: string bar;};bool Derived::bar(Base *pb){ return foo_bar == pb->foo_bar;//這里錯(cuò)誤,通過(guò)指向Base類對(duì)象的指針訪問(wèn)其Protected的成員foo_bar錯(cuò)誤,應(yīng)將pb定義為指向子類Derived類對(duì)象的指針}
2 回答

慕的地10843
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
最好的答案就是再看一遍c++ primer。
因?yàn)椴皇窃诨惖某蓡T函數(shù)里面。
所謂封裝的概念,在類的外面無(wú)法訪問(wèn)類的私有和保護(hù)的東西。
pb->foo_bar這行不是在Base類的成員函數(shù),而是在derved的成員函數(shù)里面。

飲歌長(zhǎng)嘯
TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
foo_bar == pb->foo_bar
這個(gè)句子中,pb是指?jìng)鬟^(guò)來(lái)的其他base對(duì)象指針,不是this指針指代的對(duì)象;而派生類對(duì)象可以訪問(wèn)對(duì)象自己的基類成員變量是可以的,例如下面這個(gè)句子是編譯正確的
foo_bar == foo_bar
- 2 回答
- 0 關(guān)注
- 774 瀏覽
添加回答
舉報(bào)
0/150
提交
取消