详解C和C++的区别

在学习C++和C语言的过程中,总会分不清两者的区别。在此,做一个总结梳理。

首先需要明白的是C语言是面向过程语言(分析解决问题的步骤,并将这些步骤一步一步的实现,使用的时候依次调用);C++是面向对象语言(把问题分解成各个对象,描述某个对象在整个解决问题的步骤中的行为)。

面向过程

优点:相比于面向对象,其调用类的时候是具有一定的调用开销的,比较消耗资源,所以面向过程性能高。比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展。

面向对象

优点:易维护、易复用、易扩展,具有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低

具体不同之处

引用与指针

C++存在引用,引用是一种更安全的指针,使用起来比指针要方便很多;

函数重载

C++存在函数重载,允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题,相比于C语言中书写函数名方便,类中构造函数的实现也依靠函数重载,模板的底层实现也是依靠函数重载;

开辟内存

C++中存在new/delete C语言中为malloc/free;

关键字

C++关键字要多于C语言,
例如:

  1. 存在 const inline,带默认值参数的函数;
  2. struct:在C语言中struct定义的变量中不能有函数,而在C++中可以有函数。
  3. malloc :malloc函数的返回值为void*,在C语言中可以赋值给任意类型的指针,在C++中必须强制类型转换,否则报错。
  4. struct和class:class是对struct的扩展,struct默认的访问权限是public,而class默认的访问权限是private。

模板

C++中含有模板,通过模板的实例化,可以实现不同的功能;模板就是创建类或函数的蓝图或公式。函数模板就是创建一类实现逻辑(函数体)一样只是用到的参数类型不同的函数的公式,可用来生成针对特定类型的函数版本。调用函数模板时,编译器(通常)用函数实参来推断(实参推演)模板实参。

后缀名不同

C源文件后缀.c,C++源文件后缀.cpp,在VS中,如果在创建源文件时什么都不给,默认是.cpp。

C++中存在类和对象的概念 OOP=>设计模式

返回值

C语言中,如果一个函数没有指定返回值类型,默认返回int类型;C++中,如果一个函数没有返回值则必须指定为void。

模板库

C++中引入了STL模板库,而C语言中需要自己写;

异常处理

异常,异常是程序在执行期间产生的问题。C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作。异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw。throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块;

智能指针

C++中提供了诸多智能指针来便于用户使用,尤其是在多线程编程的过程中。

参数列表

在C语言中,函数没有指定参数列表时,默认可以接收任意多个参数;但在C++中,因为严格的参数类型检测,没有参数列表的函数,默认为 void,不接收任何参数。

运算符重载

在C++中提供了运算符重载函数operator,使得用户可以使用它来进行对类的自定义操作,例如[],(),<<等等

缺省参数

C++支持缺省参数,缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的参。C语言不支持缺省参数。

函数重载

C++支持函数重载,C语言没有函数重载。函数重载,指在同一作用域中,声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型、顺序)必须不同,返回值类型可以相同也可以不同,常用来处理实现功能类似数据类型不同的问题。重载函数通常执行的操作非常类似,如打印不同的输入对象。调用函数时编译器根据实参的类型确定调用哪个重载函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值