c++多态

多态即基类(父类)指针指向(引用)子类对象的时候,基类指针调用子类重写了的基类同名虚函数时,会根据基类指针具体所指向的子类对象而表现出不同的行为。

所以,多态的条件:

1)基类指针指向了子类对象;

2)在子类中对同名基类虚函数进行了重写;

3)上述1)中的基类指针调用了该基类虚函数中被上述 2)重写过的同名基类虚函数;

为什么必须得是虚函数?

在非虚函数中,基类函数在编译的时候将会确定函数的调用地址;

而编译器在看到编译的函数是虚函数的时候,将不会对函数的调用地址进行确定,而是在运行态的时候才会对函数的调用地址进行确定;

所以实现多态必须具备虚函数的条件,即进行延迟绑定。

科普类知识:

1)虽然各个类型对象的指针都是32bit字节的长度,但是c++作为强类型的语言,只允许指针指向跟指针类型相同的对象。

2)c++中指针所指向的对象唯一跟指针类型不同的就是基类指针指向子类对象,因为子类对象属于父类对象(只不过这样调用的话,子类对象特有的一些功能函数,不能被基类指针调用)。

原文地址:https://www.cnblogs.com/ruigelwang/p/14400802.html