为什么要用虚函数,也就是说虚函数的优点是什么

zcdg909 2008-09-18 06:00:22
为什么要用虚函数,也就是说虚函数的优点是什么
...全文
459 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
nooning 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 Inpool 的回复:]
虚方法重写以后继承过来的那个方法就没了,而非虚方法用相同的方法签名重写里面的操作只是把继承过来的那个方法隐藏起来,而他本身还是存在的
虚方法的重写一般用override关键字,而非虚方法重写一般用new关键字,前者是真正的重写,即覆盖,后者其实是新建一个,将原来同签的隐藏起来。
好好去看看多态里重写与隐藏的区别。
[/Quote]

你无论用什么方法,父类有的,永远都存在。它同样被写在VTable中。
ZKM_ZHANG 2008-09-19
  • 打赏
  • 举报
回复
Inpool 说得很详细。学习了。
diffmaker 2008-09-18
  • 打赏
  • 举报
回复
今天又学习了不少知识,嘿嘿
cc_net 2008-09-18
  • 打赏
  • 举报
回复
OO思想是面向接口,面向抽象类编程

如果不能用虚函数,那就无法实现多态,就无法通过抽象类型去访问继承的对象

虚函数不是为了重写,是未来多态,为了OO

JAVA中全是虚函数
Inpool 2008-09-18
  • 打赏
  • 举报
回复
虚方法重写以后继承过来的那个方法就没了,而非虚方法用相同的方法签名重写里面的操作只是把继承过来的那个方法隐藏起来,而他本身还是存在的
虚方法的重写一般用override关键字,而非虚方法重写一般用new关键字,前者是真正的重写,即覆盖,后者其实是新建一个,将原来同签的隐藏起来。
好好去看看多态里重写与隐藏的区别。
颤菊大师 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xdbjzhhh 的回复:]

想重写重写,不想重写不重写

相当灵活

算是一个默认值,不写新函数就用旧函数
[/Quote]

恩.的确.
「已注销」 2008-09-18
  • 打赏
  • 举报
回复

想重写重写,不想重写不重写

相当灵活

算是一个默认值,不写新函数就用旧函数
walkingmu 2008-09-18
  • 打赏
  • 举报
回复
建议楼主去看看《大话设计模式》,很多设计模式都要用到虚函数的。
这是面向对象的特性之一,“继承,多态,封装”中的多态。
zcdg909 2008-09-18
  • 打赏
  • 举报
回复
不是虚函数我也可以重写呀?派生类中和基类中有同签名函数,通过派生类对象访问这个函数时,应该优先执行派生类的函数,如果派生类没有这个函数才去执行基类中这个同名函数,前提是派生类公有继承基类时才能通过派生类访问基类的这个函数。
lovehongyun 2008-09-18
  • 打赏
  • 举报
回复
子类可以重写.
wxz280973534 2008-09-18
  • 打赏
  • 举报
回复
假设有一个"猫"的类,一个"老虎"的类
一只猫他有很多属性和方法,比如
有4只脚
一个头
会睡觉
会叫(但是是猫叫)
现在你的"老虎"类派生于这个"猫类"
老虎有4只脚,一个头,会睡觉,这三个和猫是一样的,
但是"老虎"的叫声和猫不一样,这就需要重写"猫"类的"会叫"的方法
重写"会叫"的前提是"会叫"是个虚方法,
JeffChung 2008-09-18
  • 打赏
  • 举报
回复
楼上答的对。
我姓区不姓区 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhangtian00_00 的回复:]
可以重写,最大的优点.

虽然回答简单,但是绝对正确
[/Quote]
没错,实现多态
zhangtian00_00 2008-09-18
  • 打赏
  • 举报
回复
可以重写,最大的优点.

虽然回答简单,但是绝对正确

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧