鱼C论坛

 找回密码
 立即注册
查看: 3028|回复: 6

C++覆盖和重载和纯虚函数的问题

[复制链接]
发表于 2016-3-27 23:25:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我感觉覆盖,只是为了让基类的指针能调用子类的方法? 并且覆盖的限制还多, 当如果有需要这个基类的方法,但同时要增加一个形参,那么就不得不隐藏了吧,我觉得隐藏挺好的呀,但我看到的一些文章好像是说隐藏是不怎么好的东西,会引起一些错误。但有时是必须要用隐藏的吧?
还有纯虚函数在子类的实现,参数和返回值都要一模一样吗, 不一样的话是不是又是隐藏了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-28 00:39:30 | 显示全部楼层
我只看了你前面的一句话。
纯虚函数 是 一个没有用途的类。叫做抽象类。这个类什么都不干。就是为了 为派生类的调用。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-28 00:40:14 | 显示全部楼层
Angel丶L 发表于 2016-3-28 00:39
我只看了你前面的一句话。
纯虚函数 是 一个没有用途的类。叫做抽象类。这个类什么都不干。就是为了 为派 ...

因为我有 字幕密麻 恐惧症 抱歉 i'm very sorry..斯米马赛。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-28 12:47:02 | 显示全部楼层
Angel丶L 发表于 2016-3-28 00:39
我只看了你前面的一句话。
纯虚函数 是 一个没有用途的类。叫做抽象类。这个类什么都不干。就是为了 为派 ...

子类可以定义一次,子类的子类可不可以重新定义,还是那就算是覆盖了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-28 14:38:20 | 显示全部楼层
奥古斯丁少爷 发表于 2016-3-28 12:47
子类可以定义一次,子类的子类可不可以重新定义,还是那就算是覆盖了

子类的子类 就和鸡肋没关系了、
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-28 16:59:25 | 显示全部楼层
Angel丶L 发表于 2016-3-28 14:38
子类的子类 就和鸡肋没关系了、

能说详细点吗,子类的子类也能对基类的虚函数进行覆盖吧?,子类的子类能对基类的纯虚函数进行实现吗,还是算是对基类的子类的实现的覆盖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-30 16:04:38 | 显示全部楼层
奥古斯丁少爷 发表于 2016-3-28 16:59
能说详细点吗,子类的子类也能对基类的虚函数进行覆盖吧?,子类的子类能对基类的纯虚函数进行实现吗,还 ...

你这样说法本身就有点伪命题。
虚函数是通过虚表来实现的。继承发生时,虚表里会添加子类新增的虚函数地址,如果有覆盖(也就是重写),那么会用子类的方法(也就是新的函数地址)来替换父类的方法。如果发生了重定义,也就是隐藏,那么会在虚表中将基类的同名虚函数拿去,如果子类的该函数是虚函数,则放进虚表。
也就是说,如果没有发生覆盖或者隐藏,祖父类的虚表是会被层层继承下来的,那么孙类自然就可以覆盖或者隐藏(但本质上是孙类对父类的覆盖或隐藏,虽然父类也是继承祖父类的)。如果子类已经发生覆盖或者隐藏,那更不关祖父类什么事情了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表