4.4 Multi inheritance.
diff --git a/src/4-inheritance/.gitignore b/src/4-inheritance/.gitignore
index c91be50..25c281f 100644
--- a/src/4-inheritance/.gitignore
+++ b/src/4-inheritance/.gitignore
@@ -1,3 +1,4 @@
 inh-basic
 inh-virtual
 inh-abstract
+inh-multi
diff --git a/src/4-inheritance/Makefile.am b/src/4-inheritance/Makefile.am
index 6197a72..a59878d 100644
--- a/src/4-inheritance/Makefile.am
+++ b/src/4-inheritance/Makefile.am
@@ -1,3 +1,3 @@
-bin_PROGRAMS = inh-basic inh-virtual inh-abstract
+bin_PROGRAMS = inh-basic inh-virtual inh-abstract inh-multi
 AM_DEFAULT_SOURCE_EXT = .cpp
 
diff --git a/src/4-inheritance/inh-multi.cpp b/src/4-inheritance/inh-multi.cpp
new file mode 100644
index 0000000..24398e8
--- /dev/null
+++ b/src/4-inheritance/inh-multi.cpp
@@ -0,0 +1,72 @@
+#include <iostream>
+
+class Foo
+{
+  protected:
+
+    int _value;
+
+  public:
+
+    Foo(int value=0):_value(value) { }
+
+    virtual ~Foo()
+    {
+      std::cout << "~" << *this << std::endl;
+    }
+
+    friend std::ostream& operator<<(std::ostream& out, const Foo& f)
+    {
+      return out << "Foo(" << &f << ":" << f._value << ")";
+    }
+
+};
+
+class Bar1: public Foo
+{
+  public:
+
+    Bar1(int _balue):Foo(_balue) { }
+
+    friend std::ostream& operator<<(std::ostream& out, const Bar1& b1)
+    {
+      return out << "Bar1(" << &b1 << ":" << b1._value << ")";
+    }
+
+};
+
+class Bar2: public Foo
+{
+
+  public:
+
+    Bar2(int _balue):Foo(_balue) { }
+
+    friend std::ostream& operator<<(std::ostream& out, const Bar2& b2)
+    {
+      return out << "Bar2(" << &b2 << ":" << b2._value << ")";
+    }
+
+};
+
+class Bar3: public Bar1, public Bar2
+{
+
+  public:
+
+    Bar3(int _balue):Bar1(_balue + 1),Bar2(_balue * 2) { }
+
+    friend std::ostream& operator<<(std::ostream& out, const Bar3& b3)
+    {
+      return out << "Bar3(" << &b3 << ":" << b3.Bar1::_value << ":" << b3.Bar2::_value << ")";
+    }
+
+};
+
+int main(int argc, char** argv, char** envp)
+{
+  Bar3 b1(1);
+  Bar3 b2(2);
+
+  return 0;
+}