#include < iostream >
using namespace std;
class Base1{
public:
virtual int func(){ cout << "base1::func" << endl; }
};
class Base2{
public:
virtual int func(){ cout << "base2::func" << endl; }
};
class Der : public Base1, public Base2
{
public:
// overrides both Base1, and Base func
virtual int func() { cout << "der::func" << endl; }
};
/** Using auxillary classes */
class AuxBase1: public Base1{
public:
virtual int base1_func() = 0;
virtual int func() {return base1_func(); }
};
class AuxBase2: public Base2{
public:
virtual int base2_func() = 0;
virtual int func() {return base2_func(); }
};
class Der2 : public AuxBase1, public AuxBase2
{
int base1_func() { cout << __func__ << endl; }
int base2_func() { cout << __func__ << endl; }
};
int main()
{
Der *pd = new Der();
Base1 *p1 = pd;
Base2 *p2 = pd;
p1->func();
p2->func();
pd->func();
Der2 *pd2 = new Der2();
p1 = pd2;
p2 = pd2;
p1->func();
p2->func();
}
Output :
der::func der::func der::func base1_func base2_func
No comments:
Post a Comment