Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) multiple inheritance

 

Multiple inheritance is the the inheritance from at least two classes.

 

 

 

 

 

Example

 

#include <cassert>
#include <iostream>
#include <string>

//Abstract base class
struct State
{
  virtual const std::string ToStr() const = 0;
};

struct StateLoggedIn : public State
{
  const std::string ToStr() const { return "logged_in"; }
};

struct StateNotLoggedIn : public State
{
  const std::string ToStr() const { return "not_logged_in"; }
};


//Abstract base class
struct Administrator : public State {};

struct AdministratorLoggedIn : public Administrator, StateLoggedIn
{
  const std::string ToStr() const { return this->StateLoggedIn::ToStr(); }
};

struct AdministratorNotLoggedIn : public Administrator, StateNotLoggedIn
{
  const std::string ToStr() const { return this->StateNotLoggedIn::ToStr(); }
};


//Abstract base class
struct Participant : public State {};

struct ParticipantLoggedIn : public Participant, StateLoggedIn
{
  const std::string ToStr() const { return this->StateLoggedIn::ToStr(); }
};

struct ParticipantNotLoggedIn : public Participant, StateNotLoggedIn
{
  const std::string ToStr() const { return this->StateNotLoggedIn::ToStr(); }
};

#include <boost/scoped_ptr.hpp>
#include <boost/shared_ptr.hpp>

int main()
{

  boost::shared_ptr<Administrator> a1(new AdministratorLoggedIn);
  boost::shared_ptr<Administrator> a2(new AdministratorNotLoggedIn);
  boost::shared_ptr<Participant> p1(new ParticipantLoggedIn);
  boost::shared_ptr<Participant> p2(new ParticipantNotLoggedIn);

  assert(a1->ToStr() == p1->ToStr());
  assert(a2->ToStr() == p2->ToStr());
  std::cout << a1->ToStr() << '\n';
  std::cout << a2->ToStr() << '\n';
}

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict