On 23 sep, 16:32, Stuart <DerTop...@web.de> wrote:
> 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 inC+
> > +?
>
> 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
Ok, so the main reason for not implementing multiple inheritance
(without workarounds) is the complexity added to the programmers
(learning curve) and to the compiler developers (diamond
problem, ...). I thought maybe making the interfaces pure virtual,
there was a way to avoid the extra vpointers and I wanted to know how.
Then if I start adding pure virtual classes to impose the derived
classes with some kind of features like:
class Derived : implements Readable, Writeable, Comparable,
Convertible ...
regardless of the programming language, we are ending with instances
of the derived classes having 20 bytes or more even being those
classes with no members or empty. It is good to know.
Regards,
lieve
|