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;
+}