![]() |
protected by instance, not by type?
Hi gurus et al.
My collegues and I encouter a somewhat strange behaviour of our compilers and are unsure whether or not the compiler is right. It seems that anything declared protected in a base class can only be accessed by the child class if it is the same instance. I allway thought the C++ type system only relies on static types. Am I wrong? It would be nice if someone could enligthen me Gerd Here the sample code wich does not compile: class A { int privA; protected: int protA; void protMethA(A* a) { privA = a->privA; } public: int pub; void pubMethA(A* a) { privA = a->privA; } }; class B : public A { int privB; protected: void protMethB(A* a) { protA = 5; a->protMethA(this); int tmp = a->protA; } public: void pubMethB(A* a) { protA = 3; a->protMethA(this); int tmp = a->protA; } void pubMethB2(B* rhs) { rhs->privB = 5; } }; int main() { A a; B b; a.pubMethA(&b); b.pubMethB(&a); return 0; } |
Re: protected by instance, not by type?
"Gerd Schmitt" <gschmitt@it-studio.de> wrote in message news:2c3fd3ea.0409280437.43327cf2@posting.google.c om... > Hi gurus et al. > > My collegues and I encouter a somewhat strange behaviour of our > compilers and are unsure whether or not the compiler is right. > It seems that anything declared protected in a base class can only be > accessed by the child class if it is the same instance. No, that's not right. But a protected member can only be accessed by a pointer of the same type or derived type as the accessing class. class A { protected: int x; }; class B : public A { public: void f(A* a, B* b) { a->x = 1; // error, A is not the same as or derived from B b->x = 2; // ok } }; > I allway thought the C++ type system only relies on static types. Am I > wrong? I don't see the relevance of that. We are talknig about the access system not the type system. In any case the C++ type system has dynamic typing, e.g. virtual functions and dynamic_cast. john |
| All times are GMT. The time now is 07:13 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.