你要知道的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开发人员,在进入前端开发领域的时候,对 ...
随机推荐
- 使用hql当异常查询:Xxx is not mapped[from Xxx where ...]
采用当今项目hql询问.出现 QingAoCenterInfo is not mapped[from QingAoCenterInfo where...] 显然地Hibernate映射关系出现了 ...
- zoj 3820 Building Fire Stations(树上乱搞)
做同步赛的时候想偏了,状态总是时好时坏.这状态去区域赛果断得GG了. 题目大意:给一棵树.让求出树上两个点,使得别的点到两个点较近的点的距离最大值最小. 赛后用O(n)的算法搞了搞,事实上这道题不算难 ...
- Windows Phone 启动器
http://msdn.microsoft.com/zh-CN/library/gg278408(v=vs.92)#BKMK_Launchers using Microsoft.Phone.Contr ...
- Class撑起了OOP世界的天。Class类是OO的基本单元,OO的世界都是通过一个一个的类协作完成的,提高软件的重用性、灵活性和扩展性(转)
引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的“社会”关系,从而让我们抛弃书上的那些死记硬背的概 ...
- Mozilla 构建系统(转)
英文来源:Mozilla’s Build System 中文出处:开放博客,由灰狐翻译小组制作 Mozilla 构建系统是一个非常酷的分布式系统,运行在BuildBot上.系统能在每次修改后自动重新构 ...
- adp设备是什么
今天在写软工文档的可行性分析部分的时候.遇到一个新名词--adp,瞬间就不淡定了.原话例如以下: 6.1.1 基本建设投资 包含採购.开发和安装下列各项所需的费用,如: a. 须要提供一件教室,供开发 ...
- ASP.NET MVC(C#)和Quartz.Net组件
ASP.NET MVC(C#)和Quartz.Net组件 在之前的文章<推荐一个简单.轻量.功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler>和&l ...
- C#中实现并发
C#中实现并发的几种方法的性能测试 0x00 起因 去年写的一个程序因为需要在局域网发送消息支持一些命令和简单数据的传输,所以写了一个C/S的通信模块.当时的做法很简单,服务端等待链接,有用户接入后开 ...
- a web-based music player(GO + html5)
github 住址:https://github.com/codercheng/music-player 后台是用GO (windows/ linux 都能够),前端是HTML5 推荐用chrome浏 ...
- C语言功能 --C
功能名称: cabs 动力 能够: 计算绝对复数值 使用 法国: double cabs(struct complex z); 程序示例: #include <stdio.h> #incl ...