下面这个代码程序运行会出错
#include <iostream>
using namespace std;
class Parent
{
public:
Parent(int a = 0)
{
this->a = a;
}
virtual void Print()
{
cout << "父亲" << endl;
}
private:
int a;
};
class Child :public Parent
{
public:
Child(int b = 0) :Parent(0)
{
this->b = b;
}
virtual void Print()
{
cout << "儿子" << endl;
}
private:
int b;
};
int main()
{
Parent *pP = NULL;
Child *pC = NULL;
Child array[] = { Child(1), Child(2), Child(3) };
pP = array;
pC = array;
pP->Print();
pC->Print();
pP++;
pC++;
pP->Print();//会发生错误
pC->Print();
return 0;
}
我们知道父类指针指向子类,调用虚函数会发生多态。
父类指针和子类指针++会出错的原因是,父类指针+1向后移动的内存大小和子类指针+1向后移动的内存大小不同(也就是步长不同)。