Re: Multiple Inheritance vs. Interface
On 9/20/12 "lieve again" wrote:
Hi!
I have a question regarding the implementation of the multiple
inheritance in C++.
As far as I know, the implementation problem of multiple inheritance
(one of them) in every programming language is the need for an extra
pointer for each new inherited class.
For example:
class Base1{
// hidden Base1_vtr = &Base1_vtbl[0]
virtual void func();
virtual void func2();
virtual void func3();
};
class Base2{
// hidden Base2_vtr = &Base2_vtbl[0]
virtual base2func();
virtual base2func2();
};
class NormalInheritance : public Base1 {
// hidden Base1_vtr = &Base1_vtbl[0]
virtual void anotherFunc();
};
class MultipleInheritance : public Base1, Base2 {
// hidden Base1_vtr = &Base1_vtbl[0]
// hidden Base2_vtr = &Base2_vtbl[0]
virtual void anotherFunc();
};
So, sizeof(Base1) == sizeof(Base2) == sizeof(NormalInheritance) == 4
bytes (only one virtual pointer)
but sizeof(MultipleInheritance) == 8 bytes
if class MultipleInheritance would inherit from another Base3, the
size would be 12 bytes and so on.
That's right.
So with multiple inheritance we ends with big classes because of the
need of extra virtual pointers,
to avoid that, almost every language doesn't implement multiple
inheritance but Interfaces,
I don't think that this is the reason why the implementors of other
languages chose a single-inheritance approach. In my opinion it is the
complexity of a multiple-inheritance language that puts off a lot of
low-end programmers, but these programmers are the bulk of the
industry's employees.
where one
can only inherit more than one class but being that classes abstract
or pure virtual, like:
class Base1{
virtual void func() = 0;
virtual void func3();
};
class MixedClass : public NormalClass implements Base1, Base2,
Base...
My question is: Don't we have the same implementation problem as in C+
+?
Yes, single inheritance languages that are implemented using vtables
still suffer from this problem.
> Because even being these classes
abstract, they need a virtual pointer. Why do they impose that rule
in languages like C#, Java, D...?
Someone know the reason?
We can only guess. Unfortunately, there is no single person that has
perceived the Java programming language, so we cannot ask somebody (in
contrast to Mr. Stroustrup, who, although rarely, can be seen in this
newsgroup).
Regards,
Stuart