比方說,我有這樣的代碼:爲什麼我無法從基類的實例訪問受保護的成員?
class foo{
protected:
int a;
};
class bar : public foo {
public:
void copy_a_from_foo(foo& o){
a = o.a; // Error
}
void copy_a_from_bar(bar& o){
a = o.a; // OK
}
};
int main(){
bar x;
foo y;
bar z;
x.copy_a_from_foo(y);
x.copy_a_from_bar(z);
}
這裏class bar
沒有問題,從同一類的其他實例訪問受保護的成員a
,但是當我嘗試做相同的基類foo
的實例,編譯器給我一個錯誤,說a
受保護。該標準對此有何評論?
誤差
prog.cpp: In member function 'void bar::copy_a_from_foo(foo&)':
prog.cpp:3:7: error: 'int foo::a' is protected
int a;
^
prog.cpp:9:11: error: within this context
a = o.a;
P.S:我在this question一看,但它不太一樣:我想從派生類中訪問受保護的成員。
同http://stackoverflow.com/questions/3060572/c-protected-pointer-member-to -r-same-class-and-access-privileges?rq = 1 – 2015-04-03 21:37:58
由於問題與編譯器錯誤*本身無關,因此刪除了編輯,更多關於規則背後的基本原理「無法訪問受保護的成員基類「 – 2015-04-03 21:39:39
@ EugeneK no。我知道我無法從基類訪問受保護的成員。我的問題是爲什麼我不能。 – 2015-04-03 21:44:24