Back to slide -- Keyboard shortcut: 'u'  previous -- Keyboard shortcut: 'p'  next -- Keyboard shortcut: 'n'          constructor-inh/multiple-2.cc - Constructors and multiple inheritance - implicit activation of default constructor in Base.Lecture 5 - slide 4 : 40
Program 3

// Illustrates that the default Base2 constructor may be called implicitly. 
// Illustrates that a default constructor in a base class may be implicitly activated.

#include <iostream>
#include <string>

using namespace std;

class Base1{
public:
  int i;
  string s;

  Base1(int i, string s): i(i), s(s){
  }
};

class Base2{
public:
  int j;
  bool b;

  Base2(): j(11), b(false){             // Now with a default constructor
  }
   
  Base2(int j, bool b): j(j), b(b){
  }
};

class Derived: public Base1, public Base2{
public:
  double d;

  Derived(double d, int i, string s):
      Base1(i+1, s+s),                  // The Base2 constructor is not activated explictly here.
      d(d){                             //   ... The default constructor in Base2 is activated implicitly.
  }
};

int main(){
  Derived d1(5.0, 1, "AP");

  cout << d1.i << endl;    // 2
  cout << d1.s << endl;    // APAP
  cout << d1.j << endl;    // 11
  cout << d1.b << endl;    // 0
  cout << d1.d << endl;    // 5
}