本文主要是介绍父类指针的步长和子类指针的步长是不一样的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当用父类指针或者引用指向子类对象时,可以发生多态(是因为有vptr指针和虚函数表的存在),但是这个指针和子类指针的步长时不一样,具体看如下代码,特别注意看注释。
代码如下:
#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;
};void HowToPlay(Parent* base)
{base->print(); //有多态发生 //2 动手脚 }void main()
{Child c1; //定义一个子类对象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(); //多态发生cout << "hello..." << endl;system("pause");return;
}
这篇关于父类指针的步长和子类指针的步长是不一样的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!