【C++】多态(上)超详细

封装,继承,多态不只是C++的三大特性,而是面向对象编程的三大特性。

什么是多态:

不同的对象做同一件事情,结果会出现多种形态。

1.满足多态的几个条件

1.父子类完成虚函数重写(需要满足三同:函数名,参数,返回值都需要相同)。

2.父类的指针或引用去调用虚函数。(指向谁就调用谁的虚函数)

既然有了父类和子类,那么说明多态发生的前提是继承。

例子:

不同身份的人买票的价格是不同的。

但如果不满足多态的条件,就达不到我们想要的结果:

2.多态的坑

2.1虚函数重写的两个例外

强调一下:

1.返回值只能是父类返回父类的指针或引用,子类返回子类的指针或引用,顺序不能反过来。

2.返回值可以是其他不相关的父子类,也可以是自己的父子类。

关于析构函数的重写

如果我们正常的写析构函数,看看它们调用的情况:

可见,两次析构都调用的是基类的,这是正常现象,两个Person的指针自然调用Person的析构。但这并不是我们的目的,我们想要的是指针指向谁就应该调用谁的析构,也就是说:我们想让P2调用Student的析构,只有这样才满足多态的规则。

但如果我们用virtual修饰这两个析构函数呢:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

崽崽..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值