Multiple Inhertiance
#include < stdio.h>
class A
{
public:
virtual char f(void) { return 'A'; }
virtual char h(void) { return 'A'; }
char g(void) { return 'A'; }
char tf(void) { return f(); }
char tg(void) { return g(); }
};
class B
{
public:
virtual char f(void) { return 'B'; }
virtual char h(void) { return 'B'; }
char g(void) { return 'B'; }
char tf(void) { return f(); }
char tg(void) { return g(); }
};
class C : public A
{
public:
char f(void) { return 'C'; }
char g(void) { return 'C'; }
virtual char h(void) { return 'C'; }
};
class D : public B
{
public:
char f(void) { return 'D'; }
char g(void) { return 'D'; }
virtual char h(void) { return 'D'; }
};
class E : public C, public D
{
public:
char h(void) { return 'E'; }
};
class F : public D, public C
{
public:
char h(void) { return 'F'; }
};
int main()
{
E *e = new E;
F *f = new F;
printf("%c %c %c %c %c %c %c %c %c %c ",
// e->f(), // ambiguous going up the hierarchy
((A *)e)->f(), // C
((B *)e)->f(), // D
// e->g(), // ambiguous going up the hierarchy
((A *)e)->g(), // A
((B *)e)->g(), // B
((A *)e)->h(), // E
((B *)e)->h(), // E
((A *)f)->h(), // F
((B *)f)->h(), // F
((C *)f)->h(), // F
((D *)f)->h() // F
// f->tf(), // ambiguous
// f->tg(), // ambiguous
// e->tf(), // ambiguous
// e->tg()); // ambiguous
);
printf("\n");
}