c与c++的区别到底在哪里

  1. 在面向过程与面向对象方面的区别:c++在c语言面向过程的基础上引入了面向对象这一概念,c语言的面向过程是把事务都按步骤一步一步实现,而建立对象不是为了完成某一步骤而是为了解释事物在某一过程中的行为,所以面向对象是以功能来划分问题而不是步骤。C中的面向过程着重于对算法和语言的应用,面向对象是做面向过程的基础上发展来的,c++着重于对对象的处理从而获得更好的性能。C语言也可以通过基础库和宏结构构建出对象系统,而同样c++也可以不用对象就用面向过程来写。所以我认为在面向对象和面向过程方面c和c++是有区别但是又可以互相关联,在面向对象这一方面c++就是c的升级版本使得继承多态实现起来更加简单。
  2. C和c++在编写思路方面的区别:c语言是一种结构化编程语言,层次较c++来讲更加清晰,便于按模块化方式组织程序,易于调试和维护。C语言的重点在于算法和数据结构,在c语言的程序设计时首先要考虑,对输入和输出的控制,而c++首先要考虑的是如何构造一个对象模型,让这个模型能够更好的解决需要解决的问题。所以我认为c与c++在编写的思路方面有很大的区别,编写前需要考虑的完全不同。
  3. C和c++在语言层次上的区别: 为什么说语言层次,因为我觉得c++比c语言更加高级。C语言表达起来还是很机械,他本身不会多做一点点事情,全都需要程序员去告诉他怎么做。c++更加智能很多代码不用程序员来写,他都会默认的自动生成。数据类型在c语言中仅仅可以用来定义内存布局和简单的类型检查,而在c++中就被升级的很重要。C语言相比于c++缺乏高级的抽象机制,c++更加容易实现框架的构造。所以我觉得c语言与c++在层次上还是有很大的区别c++明显比c更加高大上。
  4. 在c与c++在安全性方面的区别:c++的类型安全远比c语言安全,提供了一些安全保障机制(1)用操作符new来申请内存,会严格与对象类型相匹配,而c中的molloc是void*(2)函数参数为void*的可以改写成模板,模板支持运行时检查参数类型(3)使用const代替define来定义常量,具有类型、作用域,而不是简单的文本转换(4)使用inline内联来代替define定义函数,结合函数的重载,在类型安全的前提下可以支持多种类型,如果改写成模板会更加安全。在数据的封装方面也有很大区别,c语言的封装是把数据一起放到struct中,然后把数据以引用或者指针的方式传给行为,在结构体中只能描述对象的状态而不能描述对象的行为。而c++将private、project、public数据和行为在一起,对内开放对外提供接口,外部的行为只能通过类的函数来访问私有成员,类中的成员访问权限和继承都是默认为私有,结构体中的成员访问权限和继承都是默认为共有的。使得c++类中数据的信息安全性比c语言中的结构体数据的安全性高。所以我认为c++在安全性方面相较c来讲做了很大的改进。
  5. C与c++在编译过程中的区别:c的编译速度快,但c++的语法更加简洁,c语言在编写过程中对程序的文件的组织比较松散,几乎是全要程序处理,而c++对文件的组织是以工程,各文件分类明确。C++在编写过程中会自动生成想要的程序结构可以节省很多时间。C在编译过程中更加便于对算法的理解,而在c++中很多算法的实现容易和类和继承混淆。所以编译编译过程中我们应该既有c++的类的思想,又要有c中对算法等的理解。所以我认为在实际的编译过程中各有各的好处,c写起来代码很快而c++写起来更加抽象更加有逻辑感。
  6. C与c++在函数的使用的区别:c语言对函数没有很好的归纳,写的函数多了还要面临起名字的问题,而c++引入了函数重载,这使得一个函数名可以多次利用,看起来也更加的清晰,包括函数模板之类的,函数的调用方面c++比c更加方便快捷,相同的函数可以有多个意思,类里面也可以定义函数来保护私有成员的安全,而c中的结构里面不能定义函数,在函数方面我觉得c++在c的基础上做了很大的改进,更加方便了程序员对函数的使用,从而简化了编程的代码。
  7. C++新增引用的好处:C++也引入了引用这一概念,而c中都是运用指针,引用比指针更加的安全,指针容易被设置为空指针,而引用只能定义一个对象的引用而且不能为空;在函数值传递方面也大有不同,指针传递会直接将指针指向实参的地址,而引用则不同,引用会在栈区开辟空间,但这个空间内存放的是实参的地址,当改变形参时会通过间接寻址的方法来改变实参。引用和指针的功能很类似但是c++的引用相比指针来说更加的安全。
  8. C和c++内存方面的不同:(1)栈区:c中的栈区由编译器自动分配释放,存放函数的参数值、局部变量的值,返回值和返回地址,操作的方式类似于数据结构中的栈。C++中的栈区在编译器需要的时候分配,在用完后自动回收,同样也是存放函数的参数和局部变量,返回值和返回地址,但相比于c调用起来更加的方便。(2)堆区:在堆区的申请方面c只会将空间动态开辟成功而不会调用构造函数初始化空间。而在c++中堆区的内存开辟后会调用构造函数完成初始化。而且在释放是时候,c语言中只是直接将申请的空间释放,而c++中会将申请的空间先析构再进行释放,会减少内存的消耗。C++的堆区也包涵了c中的分配方式用molloc来分配。所以c++相比于c在堆区的使用上更加合理(3)全局区:c语言语言中的全局区分为初始化和未进行初始化的,初始化的全局变量和静态变量在一块区域,为初始化的全局变量和静态数据在相邻的另一块区域,未被初始化的存储区可以通过void*来访问和操纵程序结束后系统自行释放,c++中是常量成员,全局变量和静态数据。C++相比于c在全局区方面只是合并了全局区(4)代码区都是存放的c中存放的是普通函数和主函数还有逻辑代码,而c++是成员函数和非成员函数还有主函数和逻辑代码。C++相比于c在内存区就只是多了类里面的成员函数。

 

原创文章 6 获赞 8 访问量 108

猜你喜欢

转载自blog.csdn.net/zhchaoyue/article/details/105825962