Chap10_3. Public and Private Inheritance
 
// classes.cpp: publicly and privately-derived;
#include <iostream.h>
class A                 // base class
   {
   private:
      int prvdA;    // (functions have the same access
   protected:           // rules as the data shown here)
      int prtdA;
   public:
      int pubdA;
      void displayA() {
         cout << "\n prvdataA = " << prvdA;
         cout << "\n prtdataA = " << prtdA;
         cout << "\n pubdataA = " << pubdA;
      }
   };
class A1 : public A      // publicly-derived class
   {
   public:
      void update() {
            // prvdA = 101;        // error: not accessible
            prtdA = 102;           // ok
            pubdA = 103;           // ok
      }
   };
class A2 : private A     // privately-derived class
   {
   public:
      void update() {
         // prvdA = 201;           // error: not accessible
         prtdA = 202;              // ok
         pubdA = 203;              // ok
      }
      void displayA() {
         // cout << "\n prvdataA = " << prvdA;  // error
         cout << "\n prtdataA = " << prtdA;
         cout << "\n pubdataA = " << pubdA;
      }
   };
void main() {
   A1 objA1;
   // objA1.prvdA = 1;  // error: not accessible
   // objA1.prtdA = 2;  // error: not accessible
   objA1.pubdA = 3;     // ok                    (A public to B)
   objA1.update();
   objA1.displayA();
   A2 objA2;
   // objA2.prvdA = 4;  // error: not accessible
   // objA2.prtdA = 5;  // error: not accessible
   // objA2.pubdA = 6;  // error: not accessible (A private to C)
   objA2.update();
   objA2.displayA();
}