C 与 C++ 的真正区别在哪里?

 我来答
KevinwD3

2022-03-17
知道答主
回答量:9
采纳率:0%
帮助的人:3170
展开全部

C 与 C++ 的真正区别为以下几点:


1.不再有#define、#inelude等预处理器功能

C语言有一个重要的特色就是预处理器。有些其它语言虽然也加人了#icnlude的功能,但是还缺少处理宏的能力。使用预处理器虽然可以方便的实现许多功能,但是从软件工程的角度来看,对整个软件的维护其实是很不利的。由于C语言的预处理器功能较强,有经验的程序设计员常会开发出一套只有自己才看得懂的宏集语言,一旦整个软件要交付给其它人维护,别人则很难在短时间内了解前一个设计者编写的宏集功能,由此增加了软件开发时集体工作的难度和日后维护的困难。

另外,C语言编译器所看到的程序码,与程序设计者所看到的程序码是不同的。程序设计者看到的是尚未经过预处理器处理过的程序码,而编译器看到的则是经过预算过的程序码,一旦交给预处理器处理的宏集内容有误,编译器所产生的出错信息将无法使程序设计者判断。这一点也增加了程序除错的困难。

2.不再有stureutre、union和t即edef

事实上,在C++中就可以去掉C语言中的sturc-utre和,uinon等对复杂数据类型的自定义结构类型。因为类的定义方式可以完全做到这一点。而ty侧刻ef也是不必要的,一切都用类就可以了。虽然C++这样的设计是为了和C相容,但是除了使用了多余的语言规定外,也造成了对程序认识的混淆。

3.不再有oGot

在程序设计语言的发展历史中,G〔,t。一直被毁誉参半。在很多情况下,使用(3oot可以大幅度减少程序代码,但也由于oGot可以很自由地改变程序流程,如果不小心使用就会造成程序结构上的混乱。在C语言中,我们可以使用break和。onitnue来改变某一循环的流程,但是如果想要改变两层以上的循环的流程,不是使用oGot就是以多余的逻辑变量(1切laen),配合一个条件语句(if)判断来实现。

4.不再有OperatorvOerloading

在C++中,operato:voerloading同样也是一项值得探讨的设计。几乎在所有的C++书籍中都会引用一些例子,告诉读者使用operato:voerloadi吃可以使您的程序看起来更自然。如果您使用“+”来作为复数的加法符号,大家都不会疑义,但是如果使用“,”或其它符号,别人在阅读您的程序时就难免会产生疑义。这就是OPeratorvOerloading的问题所在,当大家都对运算符斌予自己的定义,整个程序的可读性就大大降低。operatorvoerloading的存在并没有必要,我们一样可以通过类中的方法来达到同样目的。

 

才疏学浅,希望我的回答能给你带来帮助,望采纳!

物理公司的
2022-03-15 · TA获得超过5695个赞
知道大有可为答主
回答量:6105
采纳率:86%
帮助的人:1370万
展开全部
C与C++的真正区别在哪里。
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。
简单来说,C++有面向对象的概念,而C语言没有。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
旗不弃
高能答主

2022-03-18 · 资深游戏迷,热衷于探索电子科技
旗不弃
采纳数:65 获赞数:83

向TA提问 私信TA
展开全部

C++与C的区别:


1、C是面向过程的语言,而C++是面向对象的语言,那么什么是面向对象?

面向对象:面向对象是一种对现实世界的理解和抽象的方法、思想,通过将需求要素转化为对象进行问题处理的一种思想。
2、C和C++动态管理内存的方法不一样,C是使用malloc、free函数,而C++不仅有malloc/free,还有new/delete关键字。那malloc/free和new/delete差别?
malloc/free和new/delete差别:

①、malloc/free是C和C++语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。

②、由于malloc/free是库函数不是运算符,不在编译器范围之内,不能够把执行构造函数和析构函数的任务强加入malloc/free。因此C++需要一个能完成动态内存分配和初始化工作的运算符new,一个能完成清理与释放内存工作的运算符delete。

③、new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针。

④、malloc是从堆上开辟空间,而new是从自由存储区开辟(自由存储区是从C++抽象出来的概念,不仅可以是堆,还可以是静态存储区)。

⑤、malloc对开辟的空间大小有严格指定,而new只需要对象名。

⑥、malloc开辟的内存如果太小,想要换一块大一点的,可以调用relloc实现,但是new没有直观的方法来改变。



3、C++的类是C中没有的,C中的struct可以在C++中等同类来使用,struct和类的差别是,struct的成员默认访问修饰符是public,而类默认是private。
4、C++支持重载,而C不支持重载,C++支持重载在于C++名字的修饰符与C不同,例如在C++中函数 int f(int) 经过名字修饰之后变为_f_int,而C是_f,所以C++才会支持不同的参数调用不同的函数。
5、C++中有引用,而C没有。那指针和引用有什么差别?
指针和引用的区别:  

①、指针有自己的一块空间,而引用只是一个别名。

②、使用sizeof查看一个指针大小为4(32位),而引用的大小是被引用对象的大小。

③、指针可以是NULL,而引用必须被初始化且必须是对一个以初始化对象的引用。

④、作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象。

⑤、指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能被修改。

⑥、指针可以有多级指针(**p),而引用只有一级。

⑦、指针和引用使用++运算符的意义不一样。

6、C++全部变量的默认连接属性是外连接,而C是内连接。
7、C中用const修饰的变量不可以用在定义数组时的大小,但是C++用const修饰的变量可以。
8、C++有很多特有的输入输出流。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小城副Q
高能答主

2022-03-17 · 最想被夸「你懂的真多」
知道小有建树答主
回答量:669
采纳率:81%
帮助的人:12.6万
展开全部

首先,C语言是中级语言,C++是高级语言

两者最大的区别是前者是面向过程式的计算机程序设计语言,而后者是面向对象式的计算机程序设计语言

什么叫面向对象,首先要了解两个东西对象和类;

对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。所以,对象是类的实例。

类 - 类可以定义为描述对象行为/状态的模板/蓝图。

而面向过程,就是由一系列要执行的计算步骤组成,通常采用自上而下、顺序执行的方式。

C、C++ 程序主要组成包括以下部分:

预处理器指令:#include<库函数>   

函数:返回数类型 函数名(参数){函数体}  int main(){}

变量:数据类型 = 值

语句 & 表达式:printf("Hello, World! \n");

注释://  "单行注释"   /**/   "多行注释",将会被编译器忽略,这里放置程序的注释内容。它们被称为程序的注释。

只从两者的组成来看,C++程序和C不同的在于,会多几个数据类型,还有就是他们需要调用的库函数。

上面的这是C++和C在写程序时的格式的一点不同。

他们真正的不同在于,C++在于可以根据对象构造一系列该对象的特征建造一个类。

例如,如何把一直大象装进冰箱?

用C++写就可以简化为:

1、打开冰箱

2、把大象装进去

3、关上冰箱

如果用C写这段程序就需要考虑:什么样的大象?什么样的冰箱?怎么装大象?怎么关门?,主要考虑的是装大象的过程,而C++就只需要考虑大象和冰箱这两个对象就可以了

只要了解面向对象和面向过程的区别,就能知道C和C++的真正区别了

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
勇敢V牛牛
高能答主

2022-03-17 · 认真答题,希望能帮到你
知道小有建树答主
回答量:653
采纳率:94%
帮助的人:17.9万
展开全部

前  言:
很多人认为C++是C语言的升级版,但两者在本质上还是有非常大的区别的,该问题也是在employment过程中经常会涉及到的,下面对该知识点进行介绍,在面试中也可参考以下内容回答。

内容导读:

一、 C 和 C++ 的本质区别

二、C 和 C++ 的语法区别01 C 和 C++ 的本质区别

三、引用与指针

一、C 和 C++ 的本质区别

C语言是面向过程的语言,即结构化编程语言,它的重点在于算法和数据结构。在C语言程序设计过程中,首要考虑的是分析解决问题的步骤(步骤划分),然后通过一个过程将这些步骤一步一步实现,即对输入进行运算处理,得到相应的输出。面向过程语言性能较高,不需要实例化对象,消耗资源较少;但不易维护、不易复用、不易扩展。
C++语言是面向对象的语言,它的重点在于构造对象模型,构造对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题过程中的行为,即它是实物抽象化的一种体现(功能划分)。面向对象语言易维护、易复用、易扩展,可以设计出低耦合的系统。

二、 C 和 C++ 的语法区别
1、后 缀 名
C源文件后缀为.c,C++源文件后缀为.cpp。

2、声明头文件(输入输出流

C:#include <stdio.h>

C++:  #include <iostream>// C++头文件不再使用.h扩展名

3、变量声明

C:局部变量必须在所有"操作"语句之前声明;

C++:局部变量可以在程序块内的任何地方声明。

例如:C:int I; For (i=0; i<10; i++)

C++: for(int i=0; i<10; i++ )

4、输入输出方式

C:printf()/scanf()为C的库函数;

C++:cout/cin是ostream和istream类型的对象。

5、malloc、free&&new、delete

C语言中使用malloc、free来分配内存,C++中使用new、delete分配内存;

malloc、free是函数,需要C的头文件支持;new、delete是关键字,需要编译器的支持;

malloc、free调用时不会调用构造函数和析构函数,但new、delete会分被调用该函数;

new的底层会调用malloc,delete的底层会调用free;


6、struct/class

Struct适合看成是一个数据结构的实现体;class适合看成是一个对象的实现体;

struct默认的访问权限是public,而class默认的访问权限是private;

class可以用于声明类模板Templete <class C>√,而struct不可用于声明类模板Templete <stucrt C>×。


引用与指针

引用是C++对C语言的重要扩充。引用就是某一变量的一个别名,对引用的直接操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名,定义引用的表示方法与定义指针相似,只是用“&”代替了“*”。

指针是一个变量,它的值为另一个变量的地址;由于可以通过地址能找到所需的变量单元,即地址指向该变量单元。因此,将地址形象化的称为“指针”,意思是通过它能找到以它为地址的内存单元。

引用与指针有很大的区别,简要概括如下:

1、指针有自己的一块地址空间,而引用只是一个别名;

2、使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小;

3、指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象的引用;

4、作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象;

5、可以有const指针,但是没有const引用;

6、指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能被改变;



函数重载



C语言中根据函数名称生成函数符号的,这也就注定了c语言不存在函数重载的概念;而C++生成函数符号则考虑了函数名、参数个数、参数类型。需要注意的是函数的返回值并不能作为函数重载的依据,也就是说int sum()和double sum()这两个函数是不能构成重载的,且函数必须处于相同作用域才可以构成重载。

函数重载也属于多态的一种,也就是所谓的静多态。

静多态:函数重载,函数模板

动多态(运行时的多态):继承中的多态(虚函数)。

关于函数重载的问题,最重要的是隐式类型转换问题。

调用重载函数的时候,编译器首先会判断提供的参数,如果提供的实参和调用重载函数的形参类型绝对匹配,则调用相应的重载的版本;如果不匹配,则会进行相应的默认转换。如果转换成功,则调用相应的函数重载的版本;但如果转换后的类型与现有的重载函数出现二义性,则会有相应报错。如下例,当doule进行类型转换时既可以转成int,也可以转成float,故编译时会出错。



已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式