Mehrfachvererbung und der Streit um die Familienjuwelen :-)
Verfasst: Mi Feb 13, 2013 3:13 pm
Gelegentlich muss ich auch noch ein kleines Testprogramm schreiben, nur um sicher zu gehen, dass ich meine Probleme richtig löse.
Das Problem ist nicht alltäglich, entsprechend schon was ausgefallener.
Wer Interesse hat, darf mein Problem nochmals lösen:
Wie man hier sieht, ignoriert VisualStudio zum einen das using left::getValue und zum anderen das Problem: Ich bekomme bei getValue() zwei unterschiedliche Werte raus. Left wie Right sind von Base abgeleitet und durch die Mehrfachvererbung gibt es nun zwei unterschiedliche Bases und entsprechend zwei unterschiedliche Values, die ja auch unterschiedlich sein könnten.
Was muss man tun, damit Derived von Left und Right abgeleitet wird, die zwar beides Bases sind, Derived aber nur eine Base besitzt?
Das Problem ist nicht alltäglich, entsprechend schon was ausgefallener.
Wer Interesse hat, darf mein Problem nochmals lösen:
Code: Alles auswählen
#include <stdio.h>
class Base
{
int Value;
public:
Base( int value ) : Value(value) {}
int getValue() { return Value; }
};
class Left : public Base
{
public:
Left( int value ) : Base( value ) {}
};
class Right : public Base
{
public:
Right( int value ) : Base( value ) {}
};
class Derived : public Left, public Right
{
public:
Derived( int value )
: Left( value )
, Right( value+1 )
{}
using Left::getValue;
};
int main( void )
{
Derived d( 1 );
printf( "%d\n", d.Left::getValue() );
printf( "%d\n", d.Right::getValue() );
}
Was muss man tun, damit Derived von Left und Right abgeleitet wird, die zwar beides Bases sind, Derived aber nur eine Base besitzt?