你要知道的C与C++的区别
如果要说C和C++的区别的话,可能可以列出很多方面出来,但是有许多方面的区别是我们学完这两门语言之后就可以
很好的理解和区分的,比如C是面向过程的一门编程语言,C++虽然主要是以C的基础发展起来的一门新语言,但它不是
C的替代品,不是C的升级,C++和C是兄弟关系,它可以很好地进行面向对象的程序设计。我要讨论的不是这些比较显
而易见的区别,而是哪些容易被我们所忽略或者混淆的区别。
区别一:重载问题
我用的比较多的IDE是VC6.0,编写代码时通常就是建立“Win32 Console Application”,现在向工程中添加test.cpp,
在test.cpp中编写代码,代码如下:
#include <stdio.h> int Add(int a,int b)
{
return a+b;
}
int Add(int a,int b,int c)
{
return a+b+c;
} void main()
{
Add(,);
Add(,,);
return;
}
程序编译通过,并且能够正常运行。这说明C++程序可以实现重载,重载的条件是:
a.函数名相同,参数的个数不同;
b.函数名相同,参数的个数相同但参数类型不同。
而在test.c中编写同样的代码,编译时就会出现如下的错误提示:

所以可以看出C语言是不支持重载,而C++支持重载。
区别二:C/C++的void参数
在C程序中如果在声明函数的时候如果没有任何参数那么需要将参数定义为void以此来限定此函数不可传递任何参数,如果不进行限定让参数表默认为空其意义是可以传递任何参数,这个问题的由来实际上是由于要兼容早期的K&C标准造成的。K&C 在声明函数时参数表为空,也就是说函数声明时的函数原型签名信息不包含参数信息,如果要有明确的定义空参数的行为那么就要自己去处理它。
我在test01.c中编写c代码,代码如下:
#include <stdio.h>
#include <conio.h>
3 void SayHello() //是一个可变参数的函数
5 {
printf("\nHello World !");
return;
} void main()
{
SayHello();
SayHello(,,);
SayHello('a','b'); getch();
return;
}
代码编译通过,并且正常运行。可见C语言中的函数定义时不带参数并不代表该函数在调用时不能传参,而是这个函数
将成为一个可变参的函数,调用时可以传递不同个数的参数。如果要限制这个函数不能传参,这需在定义时加void关键字,
void SayHello(void)。
再在test02.cpp中编写代码,代码与上面的代码完全相同,但是在编译的时候发生了错误:

可见在C++语言中,不带参数的函数在调用时并不是和C语言一样可以传递不同个数的参数,函数不能传递任何参数,
此时C++中的 void SayHello()或者void SayHello(void)和C中的void SayHello(void)是一样的。
参考资料:http://www.cnblogs.com/thinkingfor/archive/2010/09/14/1825842.html
区别三:struct的功能
我们都知道在C和C++代码中都可以定义结构体struct,然而C语言只能在struct中声明变量(像int类型,char类型),
但是C++语言不仅可在struct中声明变量,同时还可以定义函数,优点类似于类的既可以有成员变量又有方法。
我在test_struct.cpp中编写的代码如下:
#include <stdio.h>
#include <conio.h> struct People
{
char *Name; //变量
int Age; void SayHello(char *name,int age) //函数体
{
Name=name;
Age=age;
printf("\n My name is %s,I am %d years old .",name,age);
return;
}
}; void main()
{
People p1;
p1.SayHello("Mike",); getch();
return;
}
程序编译通过,并且成功运行,运行结果:

如果在.c文件中添加以上代码,则在编译的时候就提示出错:“函数不能作为结构体struct的成员”

所以可以说C++在struct的使用上是对C做了扩展的了。
附录:如果有重要的区别没有给出,希望大家能够提出,我可以继续完善。
你要知道的C与C++的区别的更多相关文章
- 程序员必须要知道的Hadoop的一些事实
程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...
- 【转载】在IT界取得成功应该知道的10件事
在IT界取得成功应该知道的10件事 2011-08-11 13:31:30 分类: 项目管理 导读:前面大多数文章都是Jack Wallen写的,这是他的新作,看来要成为NB程序员还要不停的自我总结 ...
- 理工科应该的知道的C/C++数学计算库(转)
理工科应该的知道的C/C++数学计算库(转) 作为理工科学生,想必有限元分析.数值计算.三维建模.信号处理.性能分析.仿真分析...这些或多或少与我们常用的软件息息相关,假如有一天你只需要这些大型软件 ...
- 你应该知道的10个奇特的 HTML5 单页网站
网页设计师努力寻找新的方式来展现内容.其中一个大的趋势是单页网站,现在被世界上的一些大的品牌广泛采用,使用它们来为用户提供一个快速,干净和简单的而且美丽的网站. 下面是10个令人惊叹的单页 H ...
- Git / 程序员需要知道的12个Git高级命令
众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...
- 你应该知道的RPC原理
你应该知道的RPC原理 在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互 ...
- 希望早几年知道的5个Unix命令
原文: http://spin.atomicobject.com/2013/09/09/5-unix-commands/ 希望早几年知道的5个Unix命令 使用*nix系统已经有一段时间了.但是还是有 ...
- 关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造)
关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造) 摘要:在中文搜索中的标点.符号往往也是有语义的,比如我们要搜索“C++”或是“C#”,我们不希望搜索出来的全是“C”吧?那样对程 ...
- 对于JavaScript的函数.NET开发人员应该知道的11件事
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天小感冒今天重感冒,也不能长篇大论.如果你是.NET开发人员,在进入前端开发领域的时候,对 ...
随机推荐
- java内存分析总结
1.自带的jconsole工具. (1)假设是从命令行启动,使 JDK 在 PATH 上,执行 jconsole 就可以. (2)假设从 GUI shell 启动,找到 JDK 安装路径,打开 bin ...
- 网络爬虫WebCrawler(1)-Http网页内容抓取
在windows在下面C++由Http协议抓取网页的内容: 首先介绍了两个重要的包(平时linux在开源包,在windows下一个被称为动态链接库dll):curl包和pthreads_dll,其中c ...
- EEPlat的元数据驱动的运行引擎
EEPlat採用了元数据驱动的核心思想,因而EEPlat最重要的就是完好的元模型体系及高效灵活的解析运行引擎.EEPlat的运行引擎通过解析基于元模型的元数据,解释运行形成终于的业务系统. EEPla ...
- ViewPager实现页面切换
先贴效果图(每个开关Tab债券.尾随页变化.效果图蓝条添加的用户体验) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIxMDYyMA==/fo ...
- 用Maven打包成EAR远程部署JBoss(二)——部署到远程JBoss
用Maven打包成EAR远程部署JBoss(一)讲了如何使用Maven打包,可是在文章的最后也留下了一个问题,那就是如何将包部署到远程的JBoss中呢?近期在对之前的学习进行总结,发现少了这样一篇重要 ...
- Eclipse正在使用Ant扑灭Android数据包错误的解决方案 – Perhaps JAVA_HOME does not point to the JDK
问题描写叙述: 在Eclipse中执行ant批量打包工具出错,日志信息例如以下: D:\Android\android-sdk-windows\tools\ant\build.xml:601: The ...
- CSS3图片轮播效果
原文:CSS3图片轮播效果 在网页中用到图片轮播效果,单纯的隐藏.显示,那再简单不过了,要有动画效果,如果是自己写的话(不用jquery等),可能要费点时间.css3的出现,让动画变得不再是问题,而且 ...
- 体验VS2015正式版
初次体验VS2015正式版,安装详细过程. 阅读目录 介绍 安装 介绍 纽约时间7月20日,微软发布了vs 2015 正式版,换算到我们的北京时间就是晚上了,今天回到家里,就下下来了,装上去 ...
- DynamicReports
try { response.setCharacterEncoding("UTF-8"); response.setHeader("Content-disposition ...
- jsmart 前结合案例
前绑定jsmart这是一个不错的选择.之前通过经常使用的项目中的.最近涉及的领域的后端部.jsmart有些使用相对较少,主要是因为他想引用文件,我写的模板,在一个简单的项目,直接使用js界,很复杂的前 ...