c++多态 学习笔记

2018-10-15  本文已影响0人  奋斗中的菜鸡

今天印象最深的就是学习c++多态这一块了,年幼的时候听说过这个东西,但限于当时的眼界太窄,对于这块东西没有深入研究过,只是单纯的记住了这个特性。今天怀着无比崇拜的心情,膜拜了一下年幼时候曾经向往的大佬。
言归正传
多态,说白了就是可以用父类的指针(或引用)动态的访问子类实际成员函数的一种操作。btw,继承和虚函数是多态的基础。
当我们创建一个子类的对象,把指针丢给父类指针类型的时候,可以通过我们的父类指针访问到子类的该虚函数方法。底层这一块时怎么做到的呢?
编译阶段,c++底层为我们当前类构造一个虚表,用来存放我们当前虚函数的函数地址。当我们在实例化对象的时候底层其实又额外提供了一个虚指针给我们,暂且用vptr来表示,该vptr在调用父类的构造函数时指向父类的虚表,紧接着调用子类构造函数时指向子类的虚表即自身的虚表,这个指针才是实现多态的关键,说到这里大家大致都明白了把。
当我们,在使用子类的指针的时候,其实是使用这个vptr来访问我们的虚函数,才得以定位到当前子类的虚方法。
说白了,当涉及到多态的时候,不在单独考虑指针/引用的类型而是看指针/引用的对象的类型来判断函数的调用,而是根据对象中虚指针指向的虚表中的函数的地址来确定调用哪个函数。
以上就是这次的讨论的内容了
如果哪里有不对的地方,希望各位道友帮忙指正。

上一篇 下一篇

猜你喜欢

热点阅读