class P {public: virtual int m(int i) { cout << i; return i==0 ? i : m(i-1); } }; class C : public P {
P public: virtual int m(int i) { cout << "start"; return i<0 ? 0 : P::m(i); } };
C
P* p = new C(); p->m(k);
C::m
class P {public: virtual int m(int i) { cout << i; return i==0 ? i : P::m(i-1); } };
P'
class employee { public: employee( int n = 0 ) : sal(n) { } employee* salary(int n) { sal = n; return this; } virtual long salary() { return sal; } protected: int sal; };
k == (e->salary(k))->salary()
class manager : public employee { public: long salary() { return sal + 1000; } };
k =?= (m->salary(k))->salary()
class manager : public employee { public: manager* bonus(int n) { sal += n; return this; } };
k + n == ((m->salary(k))->bonus(n))->salary()
class A {public: virtual void operator()() = 0; virtual void value() = 0; virtual void display() = 0; };
A
class M : virtual public A {\fbox{M}
public: M( int k ) : n(k) { } void operator()() { n++; } int value() { return n; } protected: int n; };
class V : virtual public A {\fbox{V}
public: V( int h, int w ) : d(new Display(h,w)) { } void display() { d->put( value() ); } private: Display* d; };
class R : public M, public V {public: R( int k=0, int h=10, int w=20 ) : M(k), V(h,w) {} };
R
A* a = new R(); (*a)(); a->display();
class A {public: A() { body = new R(); } virtual void operator()() { body->operator()(); } virtual void value() { return body->value(); } virtual void display() { return body->display(); } protected: R* body; };
A