在学习C++和C语言的过程中,总会分不清两者的区别。在此,做一个总结梳理。
首先需要明白的是C语言是面向过程语言(分析解决问题的步骤,并将这些步骤一步一步的实现,使用的时候依次调用);C++是面向对象语言(把问题分解成各个对象,描述某个对象在整个解决问题的步骤中的行为)。
面向过程
优点:相比于面向对象,其调用类的时候是具有一定的调用开销的,比较消耗资源,所以面向过程性能高。比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展。
面向对象
优点:易维护、易复用、易扩展,具有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低
具体不同之处
引用与指针
C++存在引用,引用是一种更安全的指针,使用起来比指针要方便很多;
函数重载
C++存在函数重载,允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题,相比于C语言中书写函数名方便,类中构造函数的实现也依靠函数重载,模板的底层实现也是依靠函数重载;
开辟内存
C++中存在new/delete C语言中为malloc/free;
关键字
C++关键字要多于C语言,
例如:
- 存在 const inline,带默认值参数的函数;
- struct:在C语言中struct定义的变量中不能有函数,而在C++中可以有函数。
- malloc :malloc函数的返回值为void*,在C语言中可以赋值给任意类型的指针,在C++中必须强制类型转换,否则报错。
- 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语言没有函数重载。函数重载,指在同一作用域中,声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型、顺序)必须不同,返回值类型可以相同也可以不同,常用来处理实现功能类似数据类型不同的问题。重载函数通常执行的操作非常类似,如打印不同的输入对象。调用函数时编译器根据实参的类型确定调用哪个重载函数。
标签:函数,区别,C++,C语言,详解,参数,重载,模板 From: https://blog.csdn.net/m0_73537205/article/details/139472206