免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: art_codes

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

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2009-03-24 14:04 |显示全部楼层
原帖由 everlasting_188 于 2009-3-24 12:52 发表
我觉得这个回复也有点偏了,就一个多继承就否定java?c++好


我否定java是因为很多很多方面, 只是楼主只说了interface, 我也就只回答了interface到底是怎么回事。

原帖由 everlasting_188 于 2009-3-24 12:52 发表
我们有多少人用的好呢?评价一个语言,要考虑它的效率,这个效率指的是运行的效率,开发的效率.如果你用c++10年写一个东西,用java一年就写出来,速度上java比c++慢2到3倍,绝大多数客户会选择扩大硬件来使用java来处理.


是, 要用好C++确实需要比用好java花更多, 多得多的功夫。
C++的开发效率确实不及java。
我赞同。  也承认如果是按开发效率来评价语言的优劣, java确实比C++牛。

除了这点, java仍然是一门很糟糕的语言。


同时, 你举的例子明显不对
c++的开发效率不会比java慢10倍这么多
java的运行效率(在cpu相关的地方)也不会只差c++2,3倍。


硬件, 硬件就能无限扩大么? 单核cpu周期已经到头。 再想吃硬件必须要靠并行运算。
这又是c++的领域, 而非java。
java是可以用synchronous这些东西。 但是这些东西最终是靠谁实现的?



原帖由 everlasting_188 于 2009-3-24 12:52 发表
你要说你写的很底层,说说我们国家有多少人写过多少底层的东西,操作系统,编译器,中间间,基本上没有,有也是更改被人opensource后的加工品.

国内就这环境。 如果你愿意被java培养成“代码工人”, 那是你的自由。


原帖由 everlasting_188 于 2009-3-24 12:52 发表
如果只是效率问题的话,我会选择汇编而不会选择c或者c++,如果你说c++编译器可以优化的接近于汇编或者c?

是,你可以汇编。
btw:你写的汇编是否真的比编译器生成的代码效率高,希望你能实际测试一下
反正我从来没有写出过比编译器更优秀的汇编代码。 嗯, 我很菜。


但是你怎么不全部用汇编?  你也知道这是不现实的:
——你需要语言来给你提供抽象机制, 从而构建更大的软件


那么, 语言设计在某一方面就是抽象于效率之间的权衡
做得最好的, 就是C++。


原帖由 everlasting_188 于 2009-3-24 12:52 发表
那么你为啥就否定jvm不能做到可以接近于c++的速度?你对jvm了解多少?写jvm与写编译器的人的水平的差距?

很简单, 因为java的内存模型, 它注定比C++慢,慢不止一个数量级, 无论sun或者IBM如何吹嘘JVM。
有人会在C++中把
vector< int* >  当作 vector< int > 来使用么?  因为前者更加面向对象
java里面, 没有,在引入真正的范型机制之前也不可能有后者

原帖由 everlasting_188 于 2009-3-24 12:52 发表
从我们公司来说,c++组将近有20多万行的代码,很少有用到多重继承的.从人的角度来说,这个世界,绝大多说人不是男人就是女人,半男半女的有,我的认识范围,还是少.


我就问一句, 你们公司用吗?  std::iostream 是怎么来的?
即使你们公司不用, std::iostream用得是广泛, 还是不广泛?
别的我也不想多说了 ……  



原帖由 everlasting_188 于 2009-3-24 12:52 发表
c++新的标准在出,从<<C++语言的设计和演化>>中可以看到,多继承这个东西,即时成为标准,标准委员会也有不一致的声音,自动垃圾回收,新的标准也考虑加入可选.标准委员会作不了的东西,不一定商业公司做不了.

有些东西是对世界的认知的哲学的东西,谁对谁错,实践证明,我们只能无线接近于事物的真相.

java的设计者发现, 大多数开发其实只需要“单继承+多实现”。
他那时也许不懂mix-in。
ruby的设计者懂, 所以它放宽了限制。
那谁能知道以后会不会出现多继承支持的另外的优良编程风格? 你敢说绝对不会出现吗? 显然不敢。

为什么C++作为一个前辈, 能把这一切看透
既然你真的看过<<C++语言的设计和演化>>, 你应该懂, 我不想再重复一次。

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

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2009-03-24 14:16 |显示全部楼层
原帖由 everlasting_188 于 2009-3-24 12:52 发表
从人的角度来说,这个世界,绝大多说人不是男人就是女人,半男半女的有,我的认识范围,还是少.


我真怀疑你是否真正看过《C++语言的设计和演化》 ……
多重继承是为了解决半男半女问题的吗?!

如果你对多重继承的认识还停留在“半男半女”阶段(没关系, 大多数人都停留在这里),
你和他们一样抨击多重继承我顿时觉得非常好理解。

一个组 …… 20w行C++代码, 连自己用了些什么编程技术都不知道 ……

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

论坛徽章:
0
发表于 2009-03-24 14:38 |显示全部楼层
原帖由 OwnWaterloo 于 2009-3-24 14:16 发表


我真怀疑你是否真正看过《C++语言的设计和演化》 ……
多重继承是为了解决半男半女问题的吗?!

如果你对多重继承的认识还停留在“半男半女”阶段(没关系, 大多数人都停留在这里),
你和他们一样抨 ...



这例子确实有点不太恰当,现实中确实存在像熊猫一样的这种复合的东西,包括标准库德流的实现,但是毕竟是少说的,多重继承,我从来都是反对的,同样可以用其他方式来解决的问题,引入这个机制是语言复杂化了.你说多数人停留在这个阶段,说实在话,太清高了吧

java里没有使用多重继承也实现了标准的流,同样可以解决问题,我觉得这种方式更好一些,引入多重继承,编译器也要考虑这个问题,我觉得还是有点病病态的设计

[ 本帖最后由 everlasting_188 于 2009-3-24 14:43 编辑 ]

论坛徽章:
0
发表于 2009-03-24 14:51 |显示全部楼层
我再说几句:
1>C++的开发效率确实不及java。
我赞同。  也承认如果是按开发效率来评价语言的优劣, java确实比C++牛。

除了这点, java仍然是一门很糟糕的语言。

问:你有什么理由来否定,你一句话否定一个语言,具体的比较下



2>btw:你写的汇编是否真的比编译器生成的代码效率高,希望你能实际测试一下
反正我从来没有写出过比编译器更优秀的汇编代码。 嗯, 我很菜。

我怀疑: 你写出来的c++程序是否比使用java写出来的,在jvm运行的快,稳定,希望你也实际测试一下

3>国内就这环境。 如果你愿意被java培养成“代码工人”, 那是你的自由
你以为你懂c++就不是了?语言只是个工具,会说中国话就是演讲家?

[ 本帖最后由 everlasting_188 于 2009-3-24 14:53 编辑 ]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2009-03-24 14:59 |显示全部楼层
原帖由 everlasting_188 于 2009-3-24 14:38 发表
多重继承,我从来都是反对的,同样可以用其他方式来解决的问题,引入这个机制是语言复杂化了.

有些人经常会说他并不需要多重继承,因为所有多重继承能做的事情都能通过单继承完成,只是要使用我上面提到的那个名为“委托”的小技巧而已。更进一步,你也并不需要任何继承,因为所有单继承能够完成的事都可以通过类之间的 转发完成。实际上,你根本不需要任何类,因为你完全可以利用指针和数据结构来达到目的。可为什么你会想要建立类呢?什么时候使用语言内建设施比较方便?什么时候你宁愿用一种绕弯的方法呢?我见过 有很多场合多重继承甚至是非常复杂的多重继承发挥了重要作用。总体上来说,我更喜欢使用语言提供的功能来处理事情。


罗翼 译,现代C++风格,http://www.royaloo.com/bjarne/interviews/bs_artima2.htm


《C++语言的设计与演化》里,反复强调一些观点:
一个特性大多数时候用不上, 不应称为将起排除在外的理由。
多继承,当你需要它的时候,你是真正的需要。而不是绕着弯子用别的方式模拟
同时, 对不使用该特性的用户,应该做到0学习成本 —— 零代价原则。

Bjarne Stroustrup做到了多重继承的0代价原则,而且多重继承也满足前面2条。
所以他坚持C++中加入多重继承机制。


你用不上, 不等于别人用不上。
你发现不了多继承的优势, 不等于别人发现不了。
你喜欢绕着弯去使用多继承, 别人不一定喜欢。

C++给了你足够的自由, 完全可以0代价,通过自我限制,将多重继承排除在外。
为什么大家都要抨击C++的多重继承呢?  你完全有自由不用啊!
对于需要它的开发者(ATL/WTL), 也C++也同样提供语言层面的帮助。



我能想到的一些理由就是:
“我不想学习何时应该使用多继承,而时不应该使用。你(语言或者语言设计者)帮我决定好了”。

使用java的人, 就根本不会在去摸索, 多继承会给编程带来哪些(优良的)进化。
这也是我说它是一门糟糕的语言的原因之一。

论坛徽章:
0
发表于 2009-03-24 15:10 |显示全部楼层
虚继承,C++在语言层面上不够完美,
缺乏适当的构造参数传递机制。

其实就差那么一步而已,也不难实现,非常遗憾。

[ 本帖最后由 太平绅士 于 2009-3-24 15:11 编辑 ]

论坛徽章:
0
发表于 2009-03-24 15:15 |显示全部楼层
原帖由 OwnWaterloo 于 2009-3-24 14:04 发表


我否定java是因为很多很多方面, 只是楼主只说了interface, 我也就只回答了interface到底是怎么回事。



是, 要用好C++确实需要比用好java花更多, 多得多的功夫。
C++的开发效率确实不及java。
我 ...

受不了,简直有点崇拜你了。

同时, 你举的例子明显不对。
c++的开发效率不会比java慢10倍这么多。
java的运行效率(在cpu相关的地方)也不会只差c++2,3倍

java 鼓吹者的惯用伎俩

硬件, 硬件就能无限扩大么? 单核cpu周期已经到头。 再想吃硬件必须要靠并行运算。

“现在的硬件不是一二十年前了”是 java 鼓吹者的口头禅。

是,你可以汇编。
btw:你写的汇编是否真的比编译器生成的代码效率高,希望你能实际测试一下
反正我从来没有写出过比编译器更优秀的汇编代码。 嗯, 我很菜。


但是你怎么不全部用汇编?  你也知道这是不现实的:
——你需要语言来给你提供抽象机制, 从而构建更大的软件。

说到 C++ 代码高效他们就请出汇编堵人,还不知自己是在无理取闹。

语言设计在某一方面就是抽象于效率之间的权衡。
做得最好的, 就是C++。
100% 同意!

论坛徽章:
0
发表于 2009-03-24 15:15 |显示全部楼层
不想讨论这个问题了
1>存在就是合理的,java存在就有他的道理,没有根据的否定我认为不是一个技术人员讨论问题的基本观点
2>c++面向对象,确实还没见到什么好的框架,Stroustrup设计c++为了吸引c程序员的做法,是c++的成功处,也是失败的地方,底层的话,我更倾向于c,指针和面向对象使编译器复杂化,很多了掌握不好c++,因为对编译器理解不到位.指针的引入导致开发一个好的很OO的很难,好一点的就:stl  boost.而java就很多优秀的框架,spring,hibernate....
3>c++面向对象不及java,指针方面吧,也是继承c的,这种混合体确实没有很大的竞争力
4>java也有内存泄露,许多不好的框架就是这种问题的牺牲品

好在标准维员会也在新的标准中加很多好用的特性,想想:一个面向对象的带指针的静态语言,这些年没有什么语言上的变化,确实在很多领域都没有什么竞争力了,能保留的也就是和硬件相关的人.

底层的操作系统,数据库,其他的一些东西,不能归于c++,因为别人发明了语言,也可以发明其他,至少不是我们接触到的c++语言,而且底层的很多都是c和汇编来做的.

论坛徽章:
0
发表于 2009-03-24 15:20 |显示全部楼层
原帖由 everlasting_188 于 2009-3-24 15:15 发表
不想讨论这个问题了
1>存在就是合理的,java存在就有他的道理,没有根据的否定我认为不是一个技术人员讨论问题的基本观点
2>c++面向对象,确实还没见到什么好的框架,Stroustrup设计c++为了吸引c程序员的做法,是c ...


明显做什么就要选择最合适的,
这种话题没有结论的。
同理可证:
你到一个C/C++板块来鼓吹java, 怎能不被排砖

不过楼上有几位水平还不错 ,由衷佩服一下!

论坛徽章:
0
发表于 2009-03-24 15:24 |显示全部楼层
java 流行的一个重要原因是因为它是 Sun 的,商业推广的力量不可小觑。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP