打印

关于虚函数

[复制链接]
894|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xsgy123|  楼主 | 2012-7-17 21:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实现运行时多态的条件不同的教材上有不同的表述
例1.
(1)类之间符合类型兼容规则
(2)必须声明是虚函数
(3)必须通过成员函数或基类指针,引用调用虚函数
例2
(1)类之间符合类型兼容规则
(2)派生类必须公有继承基类,必须是虚函数
(3)必须通过基类指针,引用调用
问题是,
(1)那种表述是正确的
(2)类型兼容规则我知道,但“类之间符合类型兼容规则”在这里的具体含义是什么?
(3)“通过成员函数调用虚函数”,如果这个成员函数通过对象调用,成员函数再调用虚函数,还是运行时多态吗?肯定不是啊,因此这句话该怎么理解?

相关帖子

沙发
秋天落叶| | 2012-7-17 22:23 | 只看该作者
(1) 严格点,两种说法都不够全面。关于这个问题,楼主可以看C++ Primer Plus或者C++ Primer就会很清楚

(2) “类之间符合类型兼容规则”通常是指类和类之间有继承关系,这样才能做到类型间的转换,否则不可以。
  另外需要提醒的,从派生类转型到基类,总是安全的,这种转换叫向上转型(up-casting),反之是向下转
  型,向下转型则未必是安全的。关于这个问题,看Inside C++ Object Model就会很清楚。

(3) “通过成员函数调用虚函数”这种说法至少是不够严谨的,没有必要通过其他的成员函数去调用虚函数,纯
  属多此一举。在调用虚函数时,调用的是动态类型中实现的虚函数,比如:
  Base* pb = new Derived;
  pb->some_virtual_function();
  这个pb的静态类型是Base*, 其动态类型则是Derived,所以上面的调用就是调用Derived中实现的虚函数
  some_virtual_function(),而不是Base中实现的。

使用特权

评论回复
板凳
dfsa| | 2012-7-18 21:20 | 只看该作者
LS已经分析的很全面了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

229

主题

2603

帖子

1

粉丝