#include class parent { public: int i1; void f1() { cout << "parent method" << endl; } }; class child : public parent { public: int i2; void f2() { cout << "child method" << endl; } }; int main(int argc, char **argv) { parent x, *p; child y, *q; y.i1 = 1; q = &y; // This is normal... cout << "q->i1 = " << q->i1 << endl; p = &y; // This is NOT normal ! // But is it allowed because y has // everything that p needs to do its job cout << "p->i1 = " << p->i1 << endl; }