C++多态(对比函数隐藏,覆盖,重载,重定义,重写)

【说明:部分笔记图片copy自其他博客资料,此笔记只是个人学习总结,或许有错】
多态
父子,父类函数,子类函数再次实现自己的
然后声明一个父类指针,存储子类的地址
当这个指针调用父类的函数时,他会根据存储地址-子类的不同进行选择调用哪个子类的具体函数
注意:
父类在声明这个函数时,要加Virtual
否则,这个指针就会调用父类的函数,不会选择性的调用子类函数-也就是只读指针内容,不去分辨指针内容的类型

eg1:
在这里插入图片描述
说明:
导致错误输出的原因是,调用函数 area() 被编译器设置为基类中的版本,这就是所谓的静态多态,或静态链接 - 函数调用在程序执行前就准备好了。有时候这也被称为早绑定,因为 area() 函数在程序编译期间就已经设置好了。

eg2:
在这里插入图片描述
说明:
此时,编译器看的是指针的内容,而不是它的类型。因此,由于 tri 和 rec 类的对象的地址存储在 *shape 中,所以会调用各自的 area() 函数。
正如您所看到的,每个子类都有一个函数 area() 的独立实现。这就是多态的一般使用方式。有了多态,您可以有多个不同的类,都带有同一个名称但具有不同实现的函数,函数的参数甚至可以是相同的。

Ps:
声明了virtual就是动态函数,没声明那就是静态函数

eg3:
在这里插入图片描述

eg4:
对比 重载
一个类声明了多个函数,名字一样,但是参数却不同-可以理解为多种形态
当调用这个函数时,编译器会根据参数的类型选择调用 这个函数的对应形态
在这里插入图片描述

eg5:
对比函数的覆盖和隐藏
在这里插入图片描述
eg6:对比 重写 和 重定义
在这里插入图片描述

注意:在 C++ 中若基类中有一个函数名被重载,在子类中重定义该函数,则基类的所有 版本将被隐藏——即子类只能用子类定义的,基类的不再可用。——名字隐藏特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值