Back to slide -- Keyboard shortcut: 'u'        next -- Keyboard shortcut: 'n'          virtual-bases/virtual-1.cc - Illustration of shared, virtual, base class A.Lecture 5 - slide 20 : 40
Program 1

// Illustration of virtual base classes.

#include <iostream>
#include <string>

using namespace std;

class A {
public:
  int a;
  A(): a(8){}
  A(int a): a(11){}
};

class B : public virtual A {
public:
  int b;
  B(): b(1){}
};

class C : public virtual A {
public:
  int c;
  C(): c(2){}
};

class D : public B, public C {
public:
  int d;
  D(): d(9){}    // use default constructors of B and C
};


int f(D &x){
  cout << x.a << endl;     // 8  - not ambiguous, only one a in x. 
  cout << x.B::a << endl;  // 8
  cout << x.C::a << endl;  // 8
  cout << x.b << endl;     // 1 
  cout << x.c << endl;     // 2
  cout << x.d << endl;     // 9
}

int main(){
  D d;
  f(d);
}