今天印象最深的就是学习c++多态这一块了,年幼的时候听说过这个东西,但限于当时的眼界太窄,对于这块东西没有深入研究过,只是单纯的记住了这个特性。今天怀着无比崇拜的心情,膜拜了一下年幼时候曾经向往的大佬。
言归正传
多态,说白了就是可以用父类的指针(或引用)动态的访问子类实际成员函数的一种操作。btw,继承和虚函数是多态的基础。
当我们创建一个子类的对象,把指针丢给父类指针类型的时候,可以通过我们的父类指针访问到子类的该虚函数方法。底层这一块时怎么做到的呢?
编译阶段,c++底层为我们当前类构造一个虚表,用来存放我们当前虚函数的函数地址。当我们在实例化对象的时候底层其实又额外提供了一个虚指针给我们,暂且用vptr来表示,该vptr在调用父类的构造函数时指向父类的虚表,紧接着调用子类构造函数时指向子类的虚表即自身的虚表,这个指针才是实现多态的关键,说到这里大家大致都明白了把。
当我们,在使用子类的指针的时候,其实是使用这个vptr来访问我们的虚函数,才得以定位到当前子类的虚方法。
说白了,当涉及到多态的时候,不在单独考虑指针/引用的类型而是看指针/引用的对象的类型来判断函数的调用,而是根据对象中虚指针指向的虚表中的函数的地址来确定调用哪个函数。
以上就是这次的讨论的内容了
如果哪里有不对的地方,希望各位道友帮忙指正。
c++多态 学习笔记
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1. 结构体和共同体的区别。 定义: 结构体struct:把不同类型的数据组合成一个整体,自定义类型。共同体uni...