c++的多态理解
·
c++的多态简单来说就是,在基类的函数前加上虚函数,在派生类中重写该函数。运行期间将会根据所指对象的实际类型来调用相应的函数,如果对象类型是派生类,就调用派生类的函数,如果对象是基类,就调用基类的函数。相同的方法调用,但是有不同的实现方式。
其中多态又分为静态多态和动态多态。静态多态在编译器期间执行,编译器根据函数实参的类型,推断要调用的函数。动态多态就是在程序运行期间执行,判断对象的实际类型,然后调用相应的方法。动态绑定必须
1. 通过指针调用;
2. 指针向上转型(new) 猪向动物转型,保证安全;
3. 调用虚函数(派生类一定要重写基类中的虚函数)。
当然还包括特殊的纯虚函数,含纯虚函数的类叫做抽象类,抽象类无法实例化对象,所以派生类一定要重写。
当如果有很多类都继承这个基类,那么每个对象都要为创建基类消耗资源,这个时候就出现了虚函数表,对于有虚函数的类,编译器都会自动生成虚表。在含有虚函数的类实例化对象的时候,对象地址的前四个字节存储指向虚表的指针。
通过基类的引用或指针调用,调用基类还是派生类的虚函数,
要根据运行时根据指针或引用实际指向或引用的类型确定.
调用非虚函数时,则无论基类指向的是何种类型,都调用基类的函数
更多推荐
所有评论(0)