免费注册 查看新帖 |

Chinaunix

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

[其他] 大家赶快来说说C和C++到底有什么“奸情”吧 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-20 08:19 |只看该作者 |倒序浏览
http://www.cnblogs.com/BeyondAny ... /08/19/2646194.html


别的学校什么情况我不清楚,但是在我们学校是大一上学期就学了C语言,大一下学期就学了C++。那个时候刚进入软件学院呐,哪里搞的明白什么C/C++,更别说C和C++有什么关系了,就是在不明白的情况下就开始乱用了,也就顺理成章的出现了这样的情况:大家写出来的程序看不明白是C还是C++,于是我们就开玩笑的说他们编的都是“C+”程序。最近也看到了也总有人在面试上问:C和C++有什么区别??于是乎,那就写一篇随笔吧~~~希望大家帮忙补充哦~~~

区别一:

首先,必须要提及的是我是ACM出身,搞了一年半和教练%¥#¥#%#¥~~~(呵呵,不说了~~),也就是说,我最初接触到的是面向过程的思想,很显然了,我的编程语言那个时候是C语言,后来接触到了C++就开始了面向对象的编程,那个时候我们也编过《图书管理系统》等这些老掉牙的东西。也就是说C语言是面向过程的语言,解决问题的思路是,把问题想象成一个过程,通过过程完成输入到输出的转化。而对于C++语言呢?C++可以说是面向对象的语言,考虑问题的思路是构造一些对象模型,每个对象内部包含有方法和数据,这些对象之间可以传递数据来完成功能的。其实严格的说C++是半面向过程半面向对象的,要不怎么出现了C#呢!!(C++++)关于面向过程和面向对象的问题,我想应该不用多解释的,资料多了去了!!

区别二:

学习C++应该首先接触到class吧,其实在C中也有类似的结构的感念叫struct。在C中的struct是这样要求的只包含数据成员,不允许有成员函数,并且默认数据成员是public类型的,即在外部是可以访问的。那么C++也有struct啊,但是是有区别的,C++中的struct是可以有成员函数,但是C++中的默认也是public的,也就是更接近 class 了。那么C++中为什么要同时又struct和class呢?其实在struct和class基本是一样的,主要有下面的四点区别:(1)class中的成员(数据和函数)默认是private,而在struct中默认是public访问权限。(2)对struct的继承默认是public继承,对class的继承确默认是private继承。(3)和template一起使用的区别,class可以替换typename但是struct不可以。(4)能否用大括号{}初始化。对于struct不提供构造函数的话理论上是可以的,因为数据成员默认是public类型的,而对于class,如果数据成员是private访问权限的则不能,public访问权限则可以利用大括号初始化,对于提供了构造函数的class,理论上也是可以完成初始化的。看看代码吧:
View Code

区别三:

学过C++的都知道C++中有个叫做“重载”的词儿,这在C++中是比较重要的,但是在C中是没有的,原因要从C和C++的编译的区别说起了,实际上函数被C++编译和被C编译器编译后在符号库中的名字是不同的,我局个例子就都明白了,比如函数bool IsEquel(int x ,int y),通过C语言编译器编译在符号库中是_IsEquel,而通过C++编译器在符号库中就变成了_IsEquel_int_int 了,现在如果还有一个函数bool IsEquel(float x ,float y),通过C++编译器在符号库中变成了_IsEquel_float_float,看看经过编译之后就变成了不同的函数,也就是重载了,而在C编译器中则不是了,现在可能也应该明白了:为什么要用参数个数或者类型的不同作为重载的条件了吧~~呵呵!!

区别四:

C和C++中的内存申请和释放方式也是不同的,在C中使用的是malloc和free,而在C++更经常使用的是new和delete,现在说说这两个组合的不同之处吧:malloc和free是函数,用来动态的申请和释放内存空间,申请的就是内存空间的大小,比如int *p = (int *)malloc(sizeof(int) *10) .实际上malloc主要是用于内置类型的申请和释放,对于对象的创建用malloc则不能满足要求,因为对象的创建要自动调用构造函数,对象在消亡之前要调用析构函数,用malloc/free是不能完成的,这种情况就要使用new/delete的组合了,应该注意的是new/delete是C++中的运算符。

小弟才疏学浅只知道这些主要的区别啦,大牛们,赶快来补充吧~~~~come on !!!

论坛徽章:
0
2 [报告]
发表于 2012-08-20 09:10 |只看该作者
他们的奸情就是以前就他俩过的时候,过得挺好,现在出现了很多第三者,如java, c#,python, ruby, js等,他俩就开始吵起来了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP