Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   protected by instance, not by type? (http://www.velocityreviews.com/forums/t285910-protected-by-instance-not-by-type.html)

Gerd Schmitt 09-28-2004 12:37 PM

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;
}

John Harrison 09-28-2004 12:58 PM

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.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57