protected by instance, not by type?

G

Gerd Schmitt

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

John Harrison

Gerd Schmitt said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,051
Latest member
CarleyMcCr

Latest Threads

Top