免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 125800 | 回复: 493
打印 上一主题 下一主题

[C++] 确认一下c++中不能使用interface(如java)那样的功能把 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-22 23:29 |只看该作者 |倒序浏览
确认一下c++中不能使用interface(如java)那样的功能把
我认为是不能的,注意我说的是interface(用于java多重继承的那个,不是一般意义的接口)
我觉得是没有的,但是网上搜索说什么的都有而且人还不少…… 所以希望大家能给我一个明确的答复好么?最好能还有一些解释啦 ^_^

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
2 [报告]
发表于 2009-03-22 23:32 |只看该作者
可以的,多继承。

论坛徽章:
0
3 [报告]
发表于 2009-03-22 23:58 |只看该作者
不能把,c++当然可以多重继承,但是真的有interface么(注意不是一般意义上的是java那种建模用的)

论坛徽章:
0
4 [报告]
发表于 2009-03-23 00:01 |只看该作者
没有。这就是你想要的答案。

论坛徽章:
0
5 [报告]
发表于 2009-03-23 11:40 |只看该作者

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
6 [报告]
发表于 2009-03-23 12:26 |只看该作者
想比较语言, 请首先熟悉两门语言
java的interface和单继承多实现是一种限制,而非增强
interface将类限制为只带方法契约,不带任何实现。
单继承多实现限制的是由多个带实现的类继承——多重继承。

--------------------------------------------------------------------------------
因为java提供的interface是限制
所以在C++中,完全可以通过自我限制做到相同的功能。

struct interface1 {
  virtual ~I1();
  virtual void f11() = 0;
  virtual void f12() = 0;
  // ...
};
struct interface2 {
  virtual ~I2();
  virtual void f21() = 0;
  virtual void f22() = 0;
  // ...
};

/* interface more */

class base { /**/ };
class derived : public base, public interface1,public interface2 /* interface more */
{
   void f11() { /* implement */ }
   void f21() { /* implement */ }
   /* more implement */
};


楼主觉得这跟你想象中java的单继承多实现有什么区别么?


--------------------------------------------------------------------------------
同时,因为java的单继承多实现也是一种限制
所以java里没有真正的多重继承。
C++才拥有真正多重继承


--------------------------------------------------------------------------------
ok,我知道你又想说,C++的这种能力确实会被用到么? 否则java为什么会被限制。

我告诉你, 这限制是james gosling那个偏执狂搞出来的。
他觉得不好的东西,他就一定要在语言中去掉,不给程序员留任何余地。
他甚至想把java的extends都给去掉(说了,他就是一偏执狂)。如果真这样,楼主还会用java么?
总之,写java代码就有被语言设计者qiang jian的感觉。 不管是goto、switch 的break,还是checked exception。


而且,多继承确实有实用价值,而且是在java的自己的sdk中。
楼主知道在哪么?
楼主用过MouseListenerMouseAdapter么??
楼主能看出这是MouseAdapte的目的是想支持的是一种多重继承可以直接支持的一种编程风格么????

学java的人多半是看不出来的。因为他们本身就在一个受限的环境中,当然不知道井外的天是什么样子。
这种编程风格叫mix-in。
ruby中仍然限制普通的多继承,但是可以多继承一个mix-in模块。mix-in模块就是带有实现的,绝不是interface。

MouseAdapter的目的就是想模拟mix-in
但又因为java本身不支持多继承,所以开发者必须在以下两种方案中进行选择:
1. 继承MouseAdapter, 仅实现需要的listener方法。 但是, 不同同时继承于其他的类。
2. 实现MouseListener所有的方法,即使是空实现。
自相矛盾的语言。

可以说ruby在这点上,是相对于java的一种进步。
C++不但比他们出现得早,而且走得更远, 直接支持多重继承。
C++的理念是,提供有用的特性, 是否应该使用是程序员考虑的事情,而不是语言设计者考虑的事情。
记住,任何语言都可以写出很糟糕的代码
通过语言限制不一定是正确的方案。  它将产生出大量的”易培训“的“代码工人”。

[ 本帖最后由 OwnWaterloo 于 2009-3-23 16:44 编辑 ]

评分

参与人数 1可用积分 +10 收起 理由
JohnBull + 10 服了

查看全部评分

论坛徽章:
0
7 [报告]
发表于 2009-03-23 14:48 |只看该作者
楼上的说的太牛了,无可辩驳

论坛徽章:
0
8 [报告]
发表于 2009-03-23 17:53 |只看该作者
原帖由 OwnWaterloo 于 2009-3-23 12:26 发表
想比较语言, 请首先熟悉两门语言。
java的interface和单继承多实现是一种限制,而非增强。
interface将类限制为只带方法契约,不带任何实现。
单继承多实现限制的是由多个带实现的类继承——多重继承。

...

真实佩服的五体投地 太棒了
但是也不要把java贬的那么狠,应用方向不同吗? c++更多的是用于系统级的开发,我敢说c++软件开发的成功率平均上看来肯定是比java要低的
毕竟每种语言的使用方面不同嘛

论坛徽章:
0
9 [报告]
发表于 2009-03-23 18:26 |只看该作者
concept

论坛徽章:
0
10 [报告]
发表于 2009-03-23 18:40 |只看该作者

回复 #8 art_codes 的帖子

如果能不装 JVM,我肯定不装,我干脆就不用 Java 程序。
为什么?因为太占资源,动辄几十几百兆的内存使用。
程序小,没关系,被 page 到磁盘上的几率也小。
程序一旦大起来了,会被频繁地 page in / page out,这效率实在让人觉得乏味。
Java 的设计思想是好,可惜真实的世界里不存在完美的 JVM。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP