先上一段代码:
#include <iostream>
using namespace std;
//没有使用虚函数的继承派生关系
class Base
{
public:
Base(int i = 0):ival(i){}
void getVal()
{
cout<<ival<<endl;
}
private:
int ival;
};
class Derived:public Base
{
public:
Derived(int i = 0, int j = 1):Base(i),ival(j){}
void getVal()
{
cout<<ival<<endl;
}
private:
int ival;
};
//使用了虚函数的继承派生关系
class Base1
{
public:
Base1(int i = 0):ival(i){}
virtual void getVal()
{
cout<<ival<<endl;
}
private:
int ival;
};
class Derived1:public Base1
{
public:
Derived1(int i = 0, int j = 1):Base1(i),ival(j){}
void getVal()
{
cout<<ival<<endl;
}
private:
int ival;
};
void useBaseObj(Base b)
{
b.getVal();
}
void useDerivedObj(Derived d)
{
d.getVal();
}
void useBasePtr(Base *pb)
{
pb->getVal();
}
void useDerivedPtr(Derived *pd)
{
pd->getVal();
}
void useBase1Obj(Base1 b)
{
b.getVal();
}
void