首页 > 编程语言 >详解C和C++的区别

详解C和C++的区别

时间:2024-06-06 13:29:39浏览次数:26  
标签:函数 区别 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语言没有函数重载。函数重载,指在同一作用域中,声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型、顺序)必须不同,返回值类型可以相同也可以不同,常用来处理实现功能类似数据类型不同的问题。重载函数通常执行的操作非常类似,如打印不同的输入对象。调用函数时编译器根据实参的类型确定调用哪个重载函数。

标签:函数,区别,C++,C语言,详解,参数,重载,模板
From: https://blog.csdn.net/m0_73537205/article/details/139472206

相关文章

  • C++中的引用&
    引用基本用法:        引用是c++对c的重要扩充。在c/c++中指针的作用基本都是一样的,但是c++增加了另外一种给函数传递地址的途径,这就是按引用传递(pass-by-reference),它也存在于其他一些编程语言中,并不是c++的发明。基本语法:Type&ref=val;注意事项:&在此不是求......
  • 进程地址空间详解
    在操作系统中,进程的地址空间是一个非常关键的概念。理解它不仅有助于我们掌握进程间通信和资源分配,还能深入理解操作系统的核心机制。本文将详细讲解进程地址空间的结构、其与物理内存和进程控制块(PCB)的关系,以及页表和写时拷贝(Copy-on-Write)的具体实现。 进程地址空间概述首......
  • Session 和 Cookie 区别
    Session和Cookie是Web开发中用于存储用户相关数据的两种常见机制,它们之间有一些关键区别:Cookie:定义:Cookie是由服务器发送到用户浏览器并存储在用户计算机上的小型文本文件,用于在用户访问同一网站时进行数据存储和交换。存储位置:Cookie存储在用户的浏览器中,通常以文......
  • C++课程设计杭电题目(中)
    2073.无限的路题目描述http://acm.hdu.edu.cn/showproblem.php?pid=2073http://acm.hdu.edu.cn/showproblem.php?pid=2073ProblemDescription甜甜从小就喜欢画图画,最近他买了一支智能画笔,由于刚刚接触,所以甜甜只会用它来画直线,于是他就在平面直角坐标系中画出如下的图形:......
  • HttpContext.Current 和 IHttpContextAccessor 的区别
    "HttpContext.Current"和"IHttpContextAccessor"是两个不同的方式,用来访问当前的HTTP上下文(即与HTTP请求相关的信息,如请求、响应、用户、会话等)。"HttpContext.Current"定义:"HttpContext.Current"是在ASP.NET(旧版.NETFramework)中用于访问当前HTTP上下文的静态属......
  • SQL—数据库查询语言,全面详解演示,入门进阶必会
    文章目录一、基础二、创建表三、修改表四、插入五、更新六、删除七、查询DISTINCTLIMIT八、排序九、过滤十、通配符十一、计算字段十二、函数汇总文本处理日期和时间处理数值处理十三、分组十四、子查询十五、连接内连接自连接自然连接外连接十六、组合查询十七、视图......
  • 机器学习策略篇:详解如何改善你的模型的表现(Improving your model performance)
    如何改善模型的表现学过正交化,如何设立开发集和测试集,用人类水平错误率来估计贝叶斯错误率以及如何估计可避免偏差和方差。现在把它们全部组合起来写成一套指导方针,如何提高学习算法性能的指导方针。所以想要让一个监督学习算法达到实用,基本上希望或者假设可以完成两件事情。首......
  • Mysql 常用命令 详细大全【分步详解】
    1、启动和停止MySQL服务//暂停服务默认80netstopmysql80//启动服务netstartmysql80//任意地方启动mysql客户端的连接mysql-uroot-p2、输入密码 3、数据库4、DDL(DataDefinitionLanguage)数据定义语言,用来定义数据库对象(数据库,表,字段)1......
  • namespace C++命名空间
    命名空间的概念最早出现在C++编程语言中,用于解决代码组织和命名冲突的问题。其设计初衷是为了让开发者能够更轻松地编写和维护大型的软件系统。来源C++是一种面向对象的编程语言,它继承了C语言的基本语法和特性,并在此基础上引入了一些新的概念和功能。命名空间是其中......
  • DP 和 HDMI 哪个比较好?它们的区别有哪些?
    什么是DPDisplayPort(DP)是一种数字显示接口标准,由视频电子标准协会(VESA)开发。DP接口主要用于计算机连接显示器,但也被广泛应用于其他设备,如电视和投影仪。DP支持高分辨率和高刷新率,同时可以传输音频和数据信号。什么是HDMIHDMI(High-DefinitionMultimediaInterface)是一......