C++中父类指针可以指向子类对象,很多时候这的确提供了方便之门。担当遇到对象数组时,就要慎重考虑了。指针运算是按指针类型的长度进行计算的,对于子类对象数组,当使用父类指针指向子类对象时,指针的步长依然是父类对象所占的长度,指针移动后,所指的位置不一定就是下一个子类对象数组元素的起始地址。
#include <iostream>
using namespace std;
class Parent
{
int a;
public:
Parent(int a = 0)
{
this->a = a;
//print();
}
virtual void print()
{
cout<<"父类print函数"<<endl;
}
};
class Child : public Parent
{
int b;
public:
Child(int a = 0, int b = 0):Parent(a)
{
this->b = b;
}
virtual void print()
{
cout<<"子类print函数"<<endl;
}
};
void main()
{
Child c1[] = {Child(1), Child(2), Child(3), Child(4)};
Parent *p = NULL;
Child *c = NULL;
p = c1;
c = c1;
//在执行'++'操作之后在进行操作,会出现中断;
/*
指针运算是按指针类型的长度进行计算的,父类和子类类型长度不同在进行 '++' 操作之后,
每个数组元素的长度是子类的长度,父类指针所指的位置并不是下个数组元素的开始位置。
不能再数组上使用多态
*/
p++;
c++;
c->print();
p->print();
system("pause");
}