class P { \fbox{P}
public:
P() { _self = 0; }
virtual P* self() {
return _self?_self->self():this;
}
virtual void attach(C* p) {
_self = p;
}
private:
P* _self;
};
class C : public P { \fbox{}
public:
C() : P(this) { }
C* self() { ANSI/ISO
return _self?_self->self():this;
}
void attach(P* p) { p->attach(self()); } rejected
void redirect(C* c) { _self = c; }
private:
C* _self;
};
slide: Subtyping in C++