原文:你要知道的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++的区别的更多相关文章

  1. 程序员必须要知道的Hadoop的一些事实

    程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...

  2. 【转载】在IT界取得成功应该知道的10件事

     在IT界取得成功应该知道的10件事 2011-08-11 13:31:30 分类: 项目管理 导读:前面大多数文章都是Jack Wallen写的,这是他的新作,看来要成为NB程序员还要不停的自我总结 ...

  3. 理工科应该的知道的C/C++数学计算库(转)

    理工科应该的知道的C/C++数学计算库(转) 作为理工科学生,想必有限元分析.数值计算.三维建模.信号处理.性能分析.仿真分析...这些或多或少与我们常用的软件息息相关,假如有一天你只需要这些大型软件 ...

  4. 你应该知道的10个奇特的 HTML5 单页网站

    网页设计师努力寻找新的方式来展现内容.其中一个大的趋势是单页网站,现在被世界上的一些大的品牌广泛采用,使用它们来为用户提供一个快速,干净和简单的而且​​美丽的网站. 下面是10个令人惊叹的单页 H​​ ...

  5. Git / 程序员需要知道的12个Git高级命令

    众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...

  6. 你应该知道的RPC原理

    你应该知道的RPC原理 在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互 ...

  7. 希望早几年知道的5个Unix命令

    原文: http://spin.atomicobject.com/2013/09/09/5-unix-commands/ 希望早几年知道的5个Unix命令 使用*nix系统已经有一段时间了.但是还是有 ...

  8. 关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造)

    关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造) 摘要:在中文搜索中的标点.符号往往也是有语义的,比如我们要搜索“C++”或是“C#”,我们不希望搜索出来的全是“C”吧?那样对程 ...

  9. 对于JavaScript的函数.NET开发人员应该知道的11件事

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天小感冒今天重感冒,也不能长篇大论.如果你是.NET开发人员,在进入前端开发领域的时候,对 ...

随机推荐

  1. mumu血压计母亲节“拼团”盛大开幕,百度和厂家创造一个双赢的局面

        在BAT的互联网时代.似乎不论什么新兴产品和服务都不能脱离BAT的支持,作为中国互联网体量最庞大的三家企业.BAT代表的是资源优势.用户优势.品牌优势.因此,一旦脱离BAT的支持,想迅速做大无 ...

  2. ExtJS学习笔记:定义extjs类别

    类的定义 Ext.define('Cookbook.Vehicle', { Manufacturer: 'Aston Martin', Model: 'Vanquish', getDetails: f ...

  3. SQL开发中容易忽视的一些小地方(六)

    原文:SQL开发中容易忽视的一些小地方(六) 本文主旨:条件列上的索引对数据库delete操作的影响. 事由:今天在博客园北京俱乐部MSN群中和网友讨论了关于索引对delete的影响问题,事后感觉非常 ...

  4. Benchmark与Profiler---性能调优得力助手

    转载请注明出处:http://blog.csdn.net/gaoyanjie55/article/details/34981077 性能优化.它是一种诊断性能瓶颈,能问题点进行优化的过程.前两天听完s ...

  5. directX--大约CSource和CSourceStream (谁在叫fillbuffer)

    CSourceStream类别,它是CSource类别OutputPin[source.h/source.cpp] 派生自CAMThread和CBaseOutputPinl         成员变量: ...

  6. Eclipse-----jrebel实现jetty热部署

    步骤1:下载jrebel将文件解压缩到任意文件夹 步骤2:配置jetty watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVrZXdhbmd6aQ==/f ...

  7. ssh配置连接

    SSH构造: 1.改动vi /etc/ssh/sshd_config,依据模板将要改动的參数凝视去掉并改动參数值: Port 22 指定SSH连接的port号,安全方面不建议使用默认22port Pr ...

  8. Install Typical IIS Workloads

    原文 Install Typical IIS Workloads Introduction The IIS 7.0 and above modular architecture is designed ...

  9. Storing and Retrieving Images from SQL Server using Microsoft .NET

    原文 Storing and Retrieving Images from SQL Server using Microsoft .NET Download source - 19.6 Kb Intr ...

  10. ZOJ-3652-Maze(BFS)

    Celica is a brave person and believer of a God in the bright side. He always fights against the mons ...