多态的底层以及实现原理
-
什么是多态
1.多态就是多种形态,C++的多态分为静态多态与动态多态。
2.静态多态就是重载,在编译时就决定函数地址。
3.动态多态就是通过继承重写基类的虚函数实现的多态,运行时在虚函数表中寻找调用函数的地址。
4.在基类的函数加上virtual关键字,在派生类中重写该函数,运行时将根据对象的实际类型调用相应的函数。 -
多态的原理
1.多态性是一个接口多种实现,是面向对象的核心,分为类的多态性和函数的多态性。
2.多态用虚函数来实现,结合动态绑定。
3.存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针,虚表和类是对应的,虚表指针是和对象对应的。 -
一些题目理解
1.为什么调用普通函数比调用虚函数效率高?
因为普通函数是静态联编的,而调用虚函数是动态联编的。
联编的作用:程序调用函数,编译器决定使用哪个可执行代码块。
2.为什么要用虚函数表?
实现多态,父类对象的指针指向父类对象调用的是父类的虚函数,指向子类调用的是子类的虚函数。
同一个类的多个对象的虚函数表是同一个,所以这样就可以节省空间,一个类自己的虚函数和继承的虚函数还有重写父类的虚函数都会存在自己的虚函数表。