Friendness and derived class
Posted
by ereOn
on Stack Overflow
See other posts from Stack Overflow
or by ereOn
Published on 2010-05-04T17:30:31Z
Indexed on
2010/05/04
17:48 UTC
Read the original article
Hit count: 166
Hi,
Let's say I have the following class hierarchy:
class Base
{
protected:
virtual void foo() = 0;
friend class Other;
};
class Derived : public Base
{
protected:
void foo() { /* Some implementation */ };
};
class Other
{
public:
void bar()
{
Derived* a = new Derived();
a->foo(); // Compiler error: foo() is protected within this context
};
};
I guess I could change it too a->Base::foo()
but since foo()
is pure virtual in the Base
class, the call will result in calling Derived::foo()
anyway.
However, the compiler seems to refuse a->foo()
. I guess it is logical, but I can't really understand why. Am I missing something ? Can't (shouldn't) it handle this special case ?
Thank you.
© Stack Overflow or respective owner