Re: Restricting access should be illegal?
Walter Bright wrote:
class A {
public:
virtual void Member() { printf("A::Member\n"); }
};
class B : public A {
private:
virtual void Member() { printf("B::Member\n"); }
};
int main()
{
B *b = new B();
// b->Member(); // error, B::Member is private
A *a = b;
a->Member(); // calls B::Member
}
Shouldn't restricting access to an overriding virtual function be an
error?
No, why? Class B could implement an interface A that is only to be
called directly thru the interface specification and not thru the
concrete implementation.
After all, we can get at it anyway via an implicit conversion.
Right, because for example B implements A, so converting B to an A is fine.
Does anyone know of a legitimate design pattern that does this?
The advantage would be that anyone using the interface described by A
shall not be able to use or see the extensions defined by B. You would
be still able to use the A interface, however very explicitly and
visibly in the source by turning a B into an A.
So long,
Thomas
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]