多态是用父类指针指向子类对象 和 父类步长++ 是两个不同的概念
1、铁律1:指针也只一种数据类型,C++类对象的指针p++/--,仍然可用。
2、指针运算是按照指针所指的类型进行的。
p++ <==> p=p+1 //p = (unsigned int)basep + sizeof(*p) 步长。
3、结论:父类p++与子类p++步长不同;不要混搭,不要用父类指针++方式操作数组。
class Parent { public: Parent(int a = 0) { this->a = a; } virtual void prient() { cout << "Parent:"<< endl; } private: int a; }; class Child :public Parent { public: Child(int b = 0) :Parent(0) { //this->b = b; } virtual void prient() { cout << "Child:" << endl; } private: int b; }; main { Child array[] = { Child(1),Child(2),Child(3) }; Parent *p = NULL; Child *c = NULL; //第一步 p = array; c = array; p->prient(); c->prient();//多态发生 //第二步 p++; c++; p->prient(); c->prient();//多态发生 //第三步 p++; c++; p->prient(); c->prient();//多态发生 }