1.
#include<iostream >
using namespace std;
class Base
{
public:
virtual void who(){cout<<"Base class!"<<endl;}
};
class Derived1: public Base
{
public:
void who(){cout<<"Derived1 class!"<<endl;}
};
class Derived2: public Base
{
public:
void who(){cout<<"Derived2 class!"<<endl;}
};
int main()
{
Base b,*pt;
Derived1 d1;
Derived2 d2;
pt=&b;
pt->who();
pt=&d1;
pt->who();
pt=&d2;
pt->who();
Base &br=d1;
br.who();
br=d2;
br.who();
d1.who();
d2.who();
return 0;
}
2.
#include<iostream >
using namespace std;
class Base
{
public:
void who(){cout<<"Base class!"<<endl;}
};
class Derived1: virtual public Base
{
public:
void who(){cout<<"Derived1 class!"<<endl;}
};
class Derived2: virtual public Base
{
public:
void who(){cout<<"Derived2 class!"<<endl;}
};
int main()
{
Base b,*pt;
Derived1 d1;
Derived2 d2;
pt=&b;
pt->who();
pt=&d1;
pt->who();
pt=&d2;
pt->who();
Base &br=d1;
br.who();
br=d2;
br.who();
d1.who();
d2.who();
return 0;
}
//多重继承的二义性问题
3.
#include<iostream >
using namespace std;
class Base
{
public:
void who(){cout<<"Base class!"<<endl;}
};
class Derived1: public Base
{
public:
void who(){cout<<"Derived1 class!"<<endl;}
};
class Derived2: public Base
{
public:
void who(){cout<<"Derived2 class!"<<endl;}
};
int main()
{
Base b,*pt;
Derived1 d1;
Derived2 d2;
pt=&b;
pt->who();
pt=&d1;
pt->who();
pt=&d2;
pt->who();
Base &br=d1;
br.who();
br=d2;
br.who();
d1.who();
d2.who();
return 0;
}