父类指针和子类指针的步长

    xiaoxiao2023-11-25  168

    多态是用父类指针指向子类对象  和  父类步长++  是两个不同的概念

    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();//多态发生 }

     

     

    最新回复(0)