社区
C#
帖子详情
虚函数跟抽象函数的用法及区别
gengchenhui
2011-03-14 11:36:35
RT,这个问题期待大家的回答,现在的编程还是面向实现,不过我想学习怎么面向抽象,面向接口编程。。。
ps:期待sp来回答,不过这个问题好像太宽泛了,不知道sp会不会来回答。。。
...全文
664
18
打赏
收藏
虚函数跟抽象函数的用法及区别
RT,这个问题期待大家的回答,现在的编程还是面向实现,不过我想学习怎么面向抽象,面向接口编程。。。 ps:期待sp来回答,不过这个问题好像太宽泛了,不知道sp会不会来回答。。。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Dobzhansky
2011-03-14
打赏
举报
回复
c++ 那边学习的时候 , 讲解实现时, 说到 的虚函数表机制挺能帮助理解的.
你自己不去搞明白, 何时也不明白.
触类旁通,
知识是融合来的, 不是孤立存在的.
热爱生活的老张
2011-03-14
打赏
举报
回复
[Quote=引用 2 楼 vrhero 的回复:]
啥叫虚函数?啥叫抽象函数?弄清楚这两个词你就明白了...
C#中的规则是...
虚方法可被任何派生类重写,此外没有任何限制...
而抽象方法是隐式的虚方法,是有限制的虚方法...1.不允许实现;2.只允许在抽象类中声明;3.必须通过派生类实现...
这个问题其实跟什么“面向抽象,面向接口”没多大关系,仅仅是语法层面的东西...如果非得讲的深刻点,那就是虚方法是预置可重配置件……
[/Quote]
学习了。呵呵
hztltgg
2011-03-14
打赏
举报
回复
[Quote=引用 5 楼 gengchenhui 的回复:]
引用 3 楼 hztltgg 的回复:
虚函数是有实现的并明确允许子类去覆盖,但子类也可不覆盖
抽象函数是没有实现的子类要是具体类,一定要实现
难道你没有实际开发经验?那单纯的数学里也有抽象的概念,形状类可以定义一个得到面积的抽象函数,派生的三角形类,圆形类等实现这个得到面积的函数。
不是没有开发经验,是现在都是面向实现,这些东西都没用过,不知道什么时候该用什么。
[/Quote]
这些都是多态的范畴,你在考虑具体实现不同而又想同样处理的时候就可以用了,比如,考试,有选择题,判断题,题目打分具体方式不同,在出卷的时候就不考虑这些不同,用个抽象的方法实现出题,判断等方法,这样生成试卷的时候就方便多了,具体的实现让具体的体型类去做
ZengJerry
2011-03-14
打赏
举报
回复
虚函数和抽象函数都可以在子类中被override
1.虚函数可以有默认的实现,在子类中可被override也可不需要override
2.抽象函数必须在子类中被实现
什么时候使用抽象方法、接口?接口应该是相对于抽象类来说的。
wanghui0380
2011-03-14
打赏
举报
回复
这问题没答案
主要看你在的位置,这个题要说一定要有个答案那就一句话“屁股决定脑袋”
你座在那张椅子上,就思考那个位置改干的事情,主要就是看你是制定规则的人,还是使用规则的人
vrhero
2011-03-14
打赏
举报
回复
[Quote=引用 2 楼 vrhero 的回复:]
虚方法是预置可重配置件,抽象方法只是个规格说明...
[/Quote]
你看不懂这句话?
你需要别人怎么做却不知道自己怎么做就用抽象方法,你知道自己怎么做也允许别人自己做就用虚方法...
比如DbConnection.Open方法是抽象方法,因为没人知道事先该干什么...而object.ToString方法是虚方法,因为什么都不做不好...
xiehuanxie
2011-03-14
打赏
举报
回复
有了Interface之后, 抽象函数应用得很少, 很少遇到必须用抽象方法的情况。
gengchenhui
2011-03-14
打赏
举报
回复
[Quote=引用 3 楼 hztltgg 的回复:]
虚函数是有实现的并明确允许子类去覆盖,但子类也可不覆盖
抽象函数是没有实现的子类要是具体类,一定要实现
难道你没有实际开发经验?那单纯的数学里也有抽象的概念,形状类可以定义一个得到面积的抽象函数,派生的三角形类,圆形类等实现这个得到面积的函数。
[/Quote]
不是没有开发经验,是现在都是面向实现,这些东西都没用过,不知道什么时候该用什么。
gengchenhui
2011-03-14
打赏
举报
回复
[Quote=引用 2 楼 vrhero 的回复:]
啥叫虚函数?啥叫抽象函数?弄清楚这两个词你就明白了...
C#中的规则是...
虚方法可被任何派生类重写,此外没有任何限制...
而抽象方法是隐式的虚方法,是有限制的虚方法...1.不允许实现;2.只允许在抽象类中声明;3.必须通过派生类实现...
这个问题其实跟什么“面向抽象,面向接口”没多大关系,仅仅是语法层面的东西...如果非得讲的深刻点,那就是虚方法是预置可重配置……
[/Quote]
那构思抽象类的时候什么时候用抽象方法,什么时候用虚方法呢?
hztltgg
2011-03-14
打赏
举报
回复
虚函数是有实现的并明确允许子类去覆盖,但子类也可不覆盖
抽象函数是没有实现的子类要是具体类,一定要实现
难道你没有实际开发经验?那单纯的数学里也有抽象的概念,形状类可以定义一个得到面积的抽象函数,派生的三角形类,圆形类等实现这个得到面积的函数。
vrhero
2011-03-14
打赏
举报
回复
啥叫虚函数?啥叫抽象函数?弄清楚这两个词你就明白了...
C#中的规则是...
虚方法可被任何派生类重写,此外没有任何限制...
而抽象方法是隐式的虚方法,是有限制的虚方法...1.不允许实现;2.只允许在抽象类中声明;3.必须通过派生类实现...
这个问题其实跟什么“面向抽象,面向接口”没多大关系,仅仅是语法层面的东西...如果非得讲的深刻点,那就是虚方法是预置可重配置件,抽象方法只是个规格说明...
gengchenhui
2011-03-14
打赏
举报
回复
没人来回答啊?
IE11下面经常卡到爆
2011-03-14
打赏
举报
回复
[Quote=引用 3 楼 hztltgg 的回复:]
虚函数是有实现的并明确允许子类去覆盖,但子类也可不覆盖
抽象函数是没有实现的子类要是具体类,一定要实现
难道你没有实际开发经验?那单纯的数学里也有抽象的概念,形状类可以定义一个得到面积的抽象函数,派生的三角形类,圆形类等实现这个得到面积的函数。
[/Quote]
学习面向对象可以先抛开语法层面的东西,结合现实理解原理层的东西,还有UML也很重要,接着你应该可以做一些简单的设计,不然很有可能越来越迷惑
友林
2011-03-14
打赏
举报
回复
为啥要有面向对象,为啥要面向接口编程,为啥要对扩展开放,对修改关闭。其实都是为了规范,正所谓没有规矩不成方圆,不要大家都乱糟糟的各写各的代码。
友林
2011-03-14
打赏
举报
回复
问题不简单,就是太泛了,有些知识还是多看看书。
比如设计模式方面的。
gengchenhui
2011-03-14
打赏
举报
回复
看来是我问的问题太简单了。。。
面试题(12)|C/C++基础(8):纯
虚
函数
,
虚
函数
,
抽象
类,纯
抽象
类
C++中基类的析构
函数
为什么要用virtual虚析构
函数
C++
虚
函数
与纯
虚
函数
用法
与
区别
C++
虚
函数
和
虚
函数
表原理 C++
虚
函数
与
虚
函数
表 C++
虚
函数
表(vtable)和
虚
函数
指针(vfptr) ...
C++
虚
函数
和纯
虚
函数
的
用法
和
区别
C++
虚
函数
与纯
虚
函数
用法
与
区别
(转) 1.
虚
函数
和纯
虚
函数
可以定义在同一个类(class)中,含有纯
虚
函数
的类被称为
抽象
类(abstractclass),而只含有
虚
函数
的类(class)不能被称为
抽象
类(abstractclass)。 2.
虚
函数
可以被直接使用,也可以被子类(subclass)重载以后以多态的形式调用,而纯
虚
函数
必须在子类(sub...
c++
虚
函数
和纯
虚
函数
的
区别
虚
函数
可以有默认实现,而纯
虚
函数
没有默认实现。派生类可以选择性地重写
虚
函数
,而纯
虚
函数
必须被重写。如果一个类包含纯
虚
函数
,它将成为
抽象
类,无法实例化。
[C++] 多态(上) --
抽象
类、
虚
函数
、
虚
函数
表
C++多态中的
抽象
类,
虚
函数
,
虚
函数
表详解
C++
虚
函数
与纯
虚
函数
用法
与
区别
C++
虚
函数
与纯
虚
函数
用法
与
区别
(转) 1.
虚
函数
和纯
虚
函数
可以定义在同一个类(class)中,含有纯
虚
函数
的类被称为
抽象
类(abstractclass),而只含有
虚
函数
的类(class)不能被称为
抽象
类(abstractclass)。 2.
虚
函数
可以被直接使用,也可以被子类(subclass)重载以后以多态的形式调用,而纯
虚
函数
必须在子类(sub...
C#
111,128
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章