#include using namespace std; class A { public: A(int a); int whata(); private: int mya; }; A::A(int a) : mya(a) {} int A::whata() { return mya; } class B: public A { public: B(int a); int whatb(); private: int myb; }; B::B(int b) :A(2*b), myb(b) { } int B::whatb() { return myb; } void fA(A a) { cout << "\nPara A:" << a.whata() << "\n"; } void fB(B a) { cout << "\nPara B:" << a.whata() << "\n"; } void main() { A a(1); B b(2); cout << " a:" << a.whata() << endl; cout << " b:" << b.whatb() << " b's a:" << b.whata() << "\n\n"; fA(a); fA(b); // However, if B inherites A in private, this call is not allowed. // fB(a); // This is not allowed, even though whatb() is not used. fB(b); a = b; // B is an A with some extra properties. // b = a; // This is not allowed. }