免费注册 查看新帖 |

Chinaunix

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

[C++] c与c++区别讨论 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2003-06-22 22:27 |只看该作者

c与c++区别讨论

150个事务请求性能也是够高的了
以前测试MS SQL时性能还不到100
测试ORACLE时好像是一秒250个请求左右

当然数据库在并发性时性能也要测试的
不然如果只有一个连接, 那么做成串行的话性能当然很快了

论坛徽章:
0
22 [报告]
发表于 2003-06-23 10:21 |只看该作者

c与c++区别讨论

很多人对java性能的理解都受了gui的影响,因为java的swing实在太烂,大家直观的感受就是java太慢。其实在后台服务方面,java和c的性能差别并不大,我作得一些测试中java还超过了c。

关于c++的编译器,我去年看stl的时候还没有完全支持标准的,g++是支持最好的一个,不知道最新的g++能否完全支持。

论坛徽章:
0
23 [报告]
发表于 2003-06-23 10:37 |只看该作者

c与c++区别讨论

不是受GUI影响
而是因为JAVA需要一个虚拟机

运行虚拟机速度不会比得上运行机器码速度

STL的标准SGI的库应该全部支持了
因为STL后面许多新东西都已不再添加到里面去如HASH这个有用的数据结构
MS不使用SGI,也不支持标准,我想可能是因为MS有自己的一套容器标准,就是MFC内的CSTRING等,想用MS系统的广大用户影响STL标准的创建从他对JAVA的态度上也可以看到这点

还有楼上的测试是什么条件的, 可否说一下
虚拟机速度如果可以比机器码速度快
那么GCC确实需要改进了

论坛徽章:
0
24 [报告]
发表于 2003-06-23 10:39 |只看该作者

c与c++区别讨论

java还超过了c?疑惑中   

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
25 [报告]
发表于 2003-06-23 11:04 |只看该作者

c与c++区别讨论

C是一个结构化语言,如谭老爷子所说:它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。
对语言本身而言,C是C++的子集,那么是什么样的一个子集?从上文可以看出, C实现了C++中过程化控制及其它相关功能,而在C++中的C(我称它为“C+”),相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等玩艺儿,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等等。
再提高一点,在C++中,数据封装、类型这些东东已不是什么新鲜事了,需要考虑的是诸如:对象粒度的选择、对象接口的设计和继承、组合与继承的使用等等问题。
所以相对于C,C++包含了更丰富的“设计”的概念,但C是C++的一个自洽子集,也具有强大的功能,同样值得学习。


几点学习建议:
1.基本概念很重要。无论学C,还是学C++,基本概念都是第一位的,也是比较困难的,但只有把握了基本概念才能把握整体脉络,才能居高临下。
2.C是C++的子集,它的基本概念和设计方法相对比较容易理解,初学者可从它入手。
3.如果要学好C++,建议初学者最好别在如VC,BCB平台下写程序,那种自动化的代码生成,花花绿绿的界面,会让你手足无措。最好先找一片空地(unix,dos),从头做起,写几个大点的程序,数个回合,再到VC,BCB下看看,你会轻松得很。在我看来,学好C/C++是成为VC,BCB高手的必由之路。
4.不要妄想速成,必须得一个byte,一个bit的去抠,尽量搞清楚每一个问题。
5.几本好书:
机械工业出版社的那套“计算机科学丛书”从C到C++,到面向对象设计,一应俱全,都TMD是经典中的经典,而且价格公道,童叟无欺。
国内也有几本好书,谭老爷子的书好倒是好,就是程序错误太多。强烈推荐清华周之英的《现代软件工程》(上、中、下),它是我所见到的国内少有的一本好书,精华的精华,要点的要点,细细品来,至少也属降龙十八掌等级的东东。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
26 [报告]
发表于 2003-06-23 11:08 |只看该作者

c与c++区别讨论

看看一个网友对于c和c++的描述,挺有意思。

想学好C++,非学C不可!!!

今天我这么肯定的在这里讲这番话,是不想初学者陷入到语言越新越好的误区,本来这个题目就不是很严谨,但是我有几句话必须讲讲,为C平反!!

C++与C有什么不同呢?我们现在一步步地来分析一下
一、类,类我并不说它有什么不好,但是对于初学者,它是一个累赘。类的封装使得初学者对程序产生厌倦,感到不适和麻烦。
二、引用,引用是C++中最臭屁的东西了,最好尽量不要用它,我就是从来不用引用,除非万不得已。引用对于初学者就更容易产生混淆,不知道哪个是引用,哪个是变量。
三、函数的重载,初学者学函数的重载好像没什么坏处,但是,这会使初学者潜意识里对C语言的变量类型的重要性产生淡化,要记住C语言是对变量类型最敏感了的,变量的类型在C语言里的重要性是不言而喻的。
四、流操作符,和上面同样的道理,使得对变量类型的重要性产生淡化,况且,cin这个东东有点儿不怎么方便,有时会产生使初学者莫名其妙的结果。
五、操作符重载,典型的高级应用,初学者可能根本用不着,这个东东会让他们觉得C++很难,门槛高,看不懂…………。
六、继承,以及虚函数,典型的模仿四不象,这种狗屁东西除了看起来深奥,实用价值很低………………。我怎么可能把某个类的类型的指针去指向另一个不同类型但是是继承关系的类,来实现什么动态联编,晕…………
………………还有些东东我就不发表评论了,如:new,delete操作符等…………

七、误区:以问答形式:
问:C++是面向对象化的而C是面向过程化的?
答:第二对,第一问错,C++并非完全面向对象化,真正的面向对象化的语言恐怕只有Java才算得上。
问:C++能实现C所不能的功能吗?
答:至少我还没有发现……
问:学了C再学C++有障碍吗?比如程序设计思想……
答:至少我还没有看见谁有此症状。
问:学了C再学C++又要重头开始吗?
答:不,C++下可以实现C语言的一切功能。
问:我学完了C一定还要学C++才能编程吗?
答:完全没必要。
问:C++比C好在哪里?
答:更加符合软件工程学
问:学完了C再学C++是不是很容易?
答:那要看你是不是真正的学完了C语言,我从C到C++就一个星期的睡觉前的时间看两眼书,然后就大彻大悟。再跑到这里来发表些狗屁文章了。






最近在网上看到了很多人的学习方法,本人非常不赞同。很多人都想一口吃个胖子,要学就想学最新的,好象没有人愿意再去学那些老的,旧的编程语言了。但你们能学的懂吗?不学TC2。0等那些较早的优秀编程语言,你们能理解的了VC6。0?如果你真的能,我宁愿做你的徒弟!真是奇怪,那些最基本的语言都不懂的人,怎么可能去理解那些最新的编程语言?我学编程有三年了吧。成绩也不算多,只有一个计算机四级证和一个高程证,但我觉得我在学VC的时候还有很多的不明白的地方。没有人来教我,只能靠我自己,包括所有的成绩在内,我都是靠自己,我从不报班。学VC的半年多来,我想我已经基本入门,但依然有很多的困惑。刚开始学VC,就面临一个项目,我真的犹如笨蛋一般,四处吓摸,毫无头绪,最后勉勉强强才算做个差不多。学好VC再去学其他的高级WINDOWS编程,我想那真是轻而易举,毕竟WINDOWS的内部的很多东西都能直接被VC调用,你首先就可以对WINDOWS有个全新的认识,再去学其他的语言岂能不简单?

我的感觉是,面向过程和面向对象,其实都很重要的,在VC里也依然需要面向过程,很多东西都是一环扣一环,没有面向过程的思想,怎么可能去编程呢?建议多去看看有关WINDOWS编程的书,但多数都是比较老的书呦!我依然记得当年整天进行TC编程的辛苦,但我依然很怀念当年的劳动付出,毕竟我获得了我想获得的一切——编程思想。我觉得一个好的编程思想,绝对比你去学一门计算机语言好重要的多。要形成自己的编程风格。一个好的编程思想在你的头脑中一旦形成,学习什么语言都会很轻而易举,因为此时的你不在是简简单单的学习,而是来验证!

论坛徽章:
0
27 [报告]
发表于 2003-06-23 11:09 |只看该作者

c与c++区别讨论

总结得不错

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
28 [报告]
发表于 2003-06-23 11:10 |只看该作者

c与c++区别讨论

从编译器的角度看看c和c++,便明白其中联系和实现细节。

大家看WIN32 SDK的头文件,总是可以看到

    #ifdef __cplusplus
    extern "C" {
        #endif

        #ifdef __cplusplus
        }
    #endif

  这个就是直接能够体现实际编程时区别的地方. 在WIN系列下.所有的WIN32 SDK提供的LIB都是以C的形式存在的.当然,C和C++同样都支持C,STDCALL,FASTCALL调用.为什么系统提供C编译器编译的LIB而不是C++编译的LIB呢?这里其实就是C和C++编译器不同的地方.

  所有的函数名称只有在汇编编译器下才最清楚.因为经汇编编译器编译的函数不经过任何修饰.
C的编译器编译出来的函数名称如果在汇编编译器看来一个C调用将在函数名前家下划线('_').而一个STDCALL的函数将是_FUNC@NUMBER的形式.如FUNC(void)经过编译器后成为_FUNC@0.一个FASTCALL调用的函数被编译成@FUNC@0.顺便提一下.在WIN32的编译器里不再需要PASCALL调用.VC6已经取消了对PASCALL的支持.
光看C的编译还不够,看一下C++编译器是怎么干的.在缺省情况下.一个C++的函数经过C++编译器后编译出的函数名包括函数名,所属的类,参数类型,调用约定,返回类型.而且更要命的是这么多的信息,只有函数名和类名在编译后还依稀可见.其他就是一长串的ABCD字母,根本就是无法辨认其意义的.我们在VC手册里可以看到

一个例子:

void __stdcall b::c(float){}; ----------->; ?c@b@@QAGXM@Z
  一个函数被编译得连名字也不知道怎么样了.这么一来.如果SDK提供的是C++编译器提供了LIB.那么可以说就无法编译任何一个完整的WIN程序.更加不用说什么混合语言编程.

  现在,VC编译器提供了个extern语句.当出现extern 'C'{}语句,括号里的函数将以C方式经过编译器.从而使提供库程序方便那么点.

论坛徽章:
0
29 [报告]
发表于 2003-06-23 11:20 |只看该作者

c与c++区别讨论

虽然实现是这么实现的
但是我觉得可能也是为了兼容性考虑

因为许多程序都是用c与的
所以提供C接口
另外由于C++支持C
因此只要提供一个接口就可以了
保证系统的简洁

另外系统本身也是用c语言写的
所以可以提供原来的函数让外面调用
封装机制由外面决定

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
30 [报告]
发表于 2003-06-23 11:20 |只看该作者

c与c++区别讨论

我在灌点!呵呵


www.chinacs.net 有人这么评价的,随便看看

关于两代语言.C/C++,java/c#
不要以为这个题目是耸人听闻,但就目前的形势来看c/c++是需要退出舞台或者说的婉转一点是需要更新换代了.
我想在未来的一两年里,作为程序员等级评判的标准之一c/c++(不管是mfc还是bcb)将会让位给三种编程语言,1.sun的java2.windows平台上的c#3.xml
为什么这么说呢,我认为最大理由是目前的应用程序正在从基于独立的操作系统,传向基于internet平台.
我们以前开发应用程序都是依赖于平台的功能调用,mfc,bcb都是这样.而现在日益火热的internet编程却最不想关心的就是某一个平台的调用,譬如说要实现b2b的电子商务那么就需要做不同平台的集成,如果我是程序员我最care的就是如何实现商务逻辑
而不是各种平台之间的通信和管理.那么我们最迫切需要的就是一种与各种平台调用无关的语言,这中语言只注重程序逻辑的设计而不涉及平台的调用.而我们熟悉的c/c++却恰恰不是为这个而设计的(赫赫这也不能怪c/c++在70年代谁能知道现在internet的情况呢).c/c++的最初设计目的是为了设计unix产生一种介于汇编和高级语言之间的一种开发高效而性能不低的语言.他要比其他任何高级语言都要关心系统的物理结构,譬如一直是毁誉搀半的指针.指针之所以强大就是应为涉及了系统物理内存的管理.他可以使得程序员和系统之间成为一种半透明状态.但是就是这种半透明的状态让指针带来了更多的不稳定性.
c/c++在面向Internet的编程中却无任何优势可言.跨平台的电子商务软件最害怕顾及各种平台之间的天差地别的系统调用,最害怕时不时的由于内存泄漏而crash.c/c++的优势在这里却成为了劣势.即使在windows平台上开发基于windows dna的solution
用的最多的还是vb做的dcom而不是vc的atl做的dcom,因为c/c++虽然高效但是太容易
出错,如果不是很小心的释放内存nt很快就会资源不足.
java就是最先看到这种情况,他用jvm实现了平台无关用内存回收实现了稳定健壮.但是相当多的c/c++程序员抱怨java太慢了.的确即使到java2速度仍然是一个大问题.我曾经是一个c/c++坚决拥护者在许多论坛里和java程序员打笔仗.但是我逐渐意识到面对与internet平台而不是特定的操作系统的时候java的速度问题往往是一个小小的瑕疵.我们可以想象那一个电子商务网站会用我们手头的pc做服务器,他们不是sun的e1000就是ibm的risc6000.在这种平台上java这点速度问题只是a peice of cake.程序员只需要专注与商务逻辑的编程,而不必要关心数组是否越界,对象内存是否释放更不需要关心是不是unix和windows的系统调用不一样.
微软的c#可以说是一种java与c/c++的杂合体,他可以回收内存,可以平台无关.但是
他又可以实现一些java没有的功能譬如在标记的程序段内用指针自己管理内存,可以实现操作符的重载等等.为什么要这样做我想也许c#还肩负了一定的面向操作系统开发的任务例如winform.他基本上的思想和java类似,但是实现的方法又不一样他不通过jvm解释中间代码,而是吧源代码编译成p代码然后通过CLS库和JIT在平台上及时编译为100%的本地代码来执行.他的pe代码是独立于平台的,但是cls和jit却根据不同的平台而设计.因此c#的平台独立有点类似于c/c++在不同平台上的移植使得c#比java来的更快.而且微软还许诺cls和jit不仅针对c#还可以针对任何语言譬如pascal,smaltalk,basic因此将来有可能所有的编程语言都是可以平台无关的(ms真是毒,所有的语言都平台无关java还有什么优势呢,据说ms正在开发基于pascal smaltalk的asp+).
xml很多人可能认为与html相类似的语言和c/c++,java,c#完全不在一个档次上的语言.其实不然.我们知道不管是c#还是java都是通过统一地层计算来实现平台无关.那就必须在性能上付出一点代价.而xml却能够实现不同的语言之间的调用.譬如说一个网占用java用bean实现一个出货功能,另一个网站用dcom实现一个入库功能 .如果这个网站需要实现b2b,用一般的方式就是在他们之间写转换程序.而xml通过标记语言来描述各自的借口特性.两端通过解析xml文本来实现互相的调用,无需任何中间转换程序
只要一张xml文本就能实现bean和dcom之间的通讯(要说清楚其中的机理,需要很多xml概念如果有兴趣可以到msdn.microsoft.com/xml或者www.s3c.org去看看).目前ms的.net中最核心的技术soap就是完全基于xml的远过程调用.
介绍了那么多可能有点跑题,其实我最想说的就是21世纪的程序员应该从面向操作系统的传统方法中走出来,学习一点如何面向Internet平台编程的技术和概念.不要在无畏的那种c/c++工具好之类的地方争论.我想不出一两年不管是bcb还是mfc都要淘汰,
到那个时候要争论的不是bcb好还是mfc好而是c#好还是java好.至于xml那是不管sun和ms以至于世界任何大的IT公司包括Intel,hp都在奋力研究的技术,不学习可能就要被淘汰.至于c/c++可能就会沦落到现在汇编的地位在某些系统效能敏感的地方还能见得到.
如果是编程语言的初学者那么我建议学习java同时关注c#,他们首先比c/c++简单没有复杂的宏,指针,摸版等等让人摸不招头脑的概念.而且是完全面向对象,比c/c++的半调子面向对象清楚的多好学的多.(我推荐目前学习java,毕竟c#还没有发布而且刚发布的beta版的编译器要求高的吓人需要win2000 adv server没有128M内存的别想跑.话说回来c#和java一摸一样没有什么太大的区别学好了java将来的c#将会信手拈来)
对于目前的windows下的编程者来说学习mfc的价值还是有一点的但是不是太大.至少可以熟悉windows内在机理.但是我还是推荐关注一下c#将来的windows.net都是基于c#而不是mfc.而且c#要比mfc简单的多实现一个同样的windows桌面应用c#的开发速度是mfc的两到三倍而且几乎看不见性能的损失. visual studio 7.0中 vc将是一个次要的开发工具最主要的开发工具就是c#和vb7.0.至于borland我想是不可能不跟着ms走至少windows平台上是这样说不定明年就有一个c# builder出来作为borland的主打产品而不是c++builder了.说一句玩笑话wenny说不定很快会把这里变成www.c#help.net了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP