免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: art_codes
打印 上一主题 下一主题

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

论坛徽章:
0
61 [报告]
发表于 2009-03-24 22:10 |只看该作者
c++不只是OO,如果提到c++你就只想到OO那就证明c++你只学了很基本的东西
functional 编程不带状带,c++你写不带状带的代码也是完全可以的
erlang略读了一点,如果你实现一个服务器,底层需要c++的库写的代码模块,而且是cpu密集型的,erlang的优势也不见得如何的很好的体现出来

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

...

MouseAdapter怎么是多重继承了,,,搞笑的吧?
James怎么是偏执狂了?人家是科学家,你最多也就是代码工人
多重继承你认为好,但实际上本来是有较大缺陷的(比如菱形继承),既然可以从语言上来做限制为什么不做呢?Java一开始就没有说它效率最好,但至少安全性基本是最好的。



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

完全不知所云。。。,MouseAdapter那是设计模式,什么mix-in,纯粹是楼主看多了,想多了mix-in,为了mix-in而mix-in吧。。。

论坛徽章:
0
63 [报告]
发表于 2009-03-24 22:53 |只看该作者
举个实际例子。  你要实现一个方法, 需要依次申请3个非内存资源, 该怎么做?

这样吗???
f() {
  R1 r1 = new R1( ... );
  try {
      // do some work that may throw exception
      R2 r2 = new R2( ... );
      try {
          // do some work that may throw exception
          R3 r3 = new R3( ... );
          try {
            // ...
          }
          finally {
             if (r3!=null) try { r3.close(); } catch ( exception ) {}
          }
      }
      finally {
         if (r2!=null) try { r2.close(); } catch ( exception ) {}
      }
  }
  finally {
    if (r1!=null) try { r1.close(); } catch ( exception ) {}
  }
}

这就是java号称的, 使得资源管理更简单???
真搞笑 ……


或者这样?
f() {
  R1 r1 = null; R2 r2 = null; R3 r3 = null;
  try {
     r1 = new R1( ... );
     // do some work
     r2 = new R2( ... );
     // do some work
     r3 = new R3( ... );
     // do some work   
  }
  finally {
     if (r3!=null) try { r3.close(); } catch ( exception ) {}
     if (r2!=null) try { r2.close(); } catch ( exception ) {}
     if (r1!=null) try { r1.close(); } catch ( exception ) {}
  }
}
稍微好那么点。

汗,拿这个说事更是牵强了,比如,C++里,你还要记得栈上的对象你别传递出方法,而Java里却不受这个显限制,这又说明什么问题呢?

论坛徽章:
0
64 [报告]
发表于 2009-03-24 23:06 |只看该作者
洗洗睡把,没别要在这充大牛,每种语言都只是工具,在这说C++怎么怎么好,Java怎么怎么差,陡增笑料。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
65 [报告]
发表于 2009-03-24 23:11 |只看该作者
原帖由 yovn 于 2009-3-24 22:53 发表

汗,拿这个说事更是牵强了,比如,C++里,你还要记得栈上的对象你别传递出方法,而Java里却不受这个显限制,这又说明什么问题呢?


稍有C/C++常识的人就知道栈上的对象只能通过拷贝而非引用传递。
换句话说, 这个问题从来没有成为C/C++开发中的问题
你,真的C/C++开发么???


反之, 不管你有无常识, 在java中, 你还是得那么写。

到底是我提出的问题牵强还是你提出的问题牵强???

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

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
66 [报告]
发表于 2009-03-24 23:16 |只看该作者
原帖由 yovn 于 2009-3-24 22:43 发表
MouseAdapter那是设计模式


看见Adapter, 谁不知道那是模式
这年头谁都开口闭口模式, 又有多少人真正懂模式??

模式的目的是做什么?
Adapter, 适配不同接口,使之兼容

MouseAdapter,它适配了什么? 它兼容了什么??
它什么都没有适配!!!
它存在的目的, 仅仅是为了给MouseListener提供默认实现
这才是它的最本质目的

由此,它本名应该叫 MouseDefaultListener或者MouseMixIn
至于sun要给它取这个名字?
因为sun的那些家伙不懂mix-in?
为了在模式流行的时候做的一个噱头??
就像java 所谓的generic那个噱头一样???
还是因为java自己也发现,如果把它叫做MouseMixIn,就等于自己扇自己嘴巴????
这就不得而知了


你,真的模式, MouseAdapter么???


原帖由 yovn 于 2009-3-24 22:43 发表
什么mix-in,纯粹是楼主看多了,想多了mix-in,为了mix-in而mix-in吧。。。


到底是我看mix-ix看多了, 还是你看模式看多了??
到底是我为了mix-in而mix-in, 还是你为了adapter而adapter???


原帖由 yovn 于 2009-3-24 22:43 发表
完全不知所云。。。

以你的水平,当然会觉得不知所云
不要以为看过两本模式的书, 就可以拿出来瞎嚷嚷,就可以拿出来显摆。
说得出个模式的名字, 却不理解模式的目的浮躁

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

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
67 [报告]
发表于 2009-03-24 23:19 |只看该作者
原帖由 yovn 于 2009-3-24 23:06 发表
洗洗睡把,没别要在这充大牛,每种语言都只是工具,在这说C++怎么怎么好,Java怎么怎么差,陡增笑料。


我也想说 “洗洗睡把,没别要在这充大牛”。

别在这里“陡增笑料”。

btw, 喜欢说“每种语言都只是工具” ,经常都是不愿思考、夸夸其谈的家伙。 我看你也差不多。

看看你对局部对象的理解 …… (难道这真是你日常开发中困扰吗?)
而我提的java的问题, 难道在你的日常开发中不是这样吗?
或者你已经习惯,不觉得这是困扰? 或者你根本不用java开发

看看你对模式的理解 ……

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

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
68 [报告]
发表于 2009-03-24 23:24 |只看该作者
原帖由 yovn 于 2009-3-24 22:43 发表
MouseAdapter怎么是多重继承了,,,搞笑的吧?
James怎么是偏执狂了?人家是科学家,你最多也就是代码工人
多重继承你认为好,但实际上本来是有较大缺陷的(比如菱形继承),既然可以从语言上来做限制为什么不做呢?Java一开始就没有说它效率最好,但至少安全性基本是最好的。


James打算把java中的extends去掉, 你说他算不算偏执狂?
就算他是科学家, 他设计的语言就是想把大家培养成代码工人

从语言上做限制, 丧失的就是语言的表达能力
多重继承不是任何时候都无用真正需要多重继承的时候, java只能绕着弯来做。


请好好看看前面的帖子再说话。(居然叫我楼主, 断章取义的家伙)
看看C++的设计理念。
看看人们对多重继承的逐步认识。
看看ruby相对于java的进步。
看看使用了多重继承的库。
看看多重继承到底是不是无用。

[ 本帖最后由 OwnWaterloo 于 2009-3-25 00:19 编辑 ]

论坛徽章:
0
69 [报告]
发表于 2009-03-24 23:43 |只看该作者
顶了, 进来膜拜一下大牛~~

论坛徽章:
0
70 [报告]
发表于 2009-03-25 00:16 |只看该作者
嗯..膜拜一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP