Back to slide -- Keyboard shortcut: 'u'  previous -- Keyboard shortcut: 'p'  next -- Keyboard shortcut: 'n'          base-class-access/base-class-access-2.cc - Same as above - with answers.Lecture 5 - slide 27 : 40
Program 3

// Program indended to illustrate and discuss the rules of polymorphism in C++
// when we make use of private and public base classes (with multiple inheritance).
// Answers in the next program - or per revealing of trailing comments.

#include <iostream>
#include <string>

using namespace std;

class B {
private:
  int b;
public:
  B(int b): b(b){}
  void Bop(){
    cout << "Bop()" << endl;
  }

};

class C {
private:
  int c;
public:
  C(int c): c(c){}
  void Cop(){
    cout << "Cop()" << endl;
  }
};

class D : private B, public C {
private:
  int d;
public:
  D(int b, int c, int d): B(b), C(c), d(d){} 
};

// Which are legal? We care about the static types of x, y, z, v, and w. Reveal...
int f(){           
  B *x = new D(1,2,3);  // Error: B is a private base. The D-object is not a B-object.
  C *y = new D(1,2,3);  // OK:    C is a public  base. The D-object is a C-object.
  D *z = new D(1,2,3);  // OK, of course.
  D *v = new B(1);      // Error: Against rules of polymorphism.
  D *w = new C(1);      // Error: Against rules of polymorphism.
}

int main(){
  f();
}