C++与C语言的区别

news2024/12/26 10:44:21

前言

        本文主要用C语言和C++做对比来学习C++,便于个人理解。C++包含C语言,是对C语言的扩展,在C++中,支持C语言的语法使用,C++是C语言的超集

一、C++与C语言的区别   

  • C语言简单高效,适合低级系统编程和硬件相关的开发。
  • C++更加灵活、强大,适合大型项目开发,尤其是需要面向对象、代码复用和复杂数据结构的应用。

1. 编程范式

  • C语言:C是一种过程式编程语言,主要关注函数和过程。程序是通过一系列函数调用来执行任务的。
  • C++:C++支持多种编程范式,最主要的是面向对象编程(OOP),同时也支持过程式编程。C++引入了类、对象、继承、多态、封装和抽象等OOP概念,使得代码可以更具模块化和可重用性。

2. 类和对象

  • C语言:C不支持面向对象编程,没有类和对象的概念。
  • C++:C++支持类和对象,允许开发者创建自定义的数据类型,进行更高级别的抽象和封装。

3. 函数重载和运算符重载

  • C语言:C不支持函数重载或运算符重载,函数名必须是唯一的,运算符功能是固定的。
  • C++:C++允许函数重载(同名函数可以有不同的参数)和运算符重载(例如,可以定义“+”来用于两个自定义对象之间的加法操作)。

4. 标准库

  • C语言:C的标准库较为基础,主要提供了一些与输入输出、字符串处理、数学计算等相关的函数(如stdio.hstdlib.h等)。
  • C++:C++有更丰富的标准库,除了C语言的标准库外,还引入了STL(标准模板库),提供了常用的数据结构(如vectorlistmap等)和算法。

5. 内存管理

  • C语言:C的内存管理主要通过malloccallocreallocfree来进行手动内存分配和释放。
  • C++:C++除了可以使用C的内存管理函数外,还引入了newdelete运算符,用于动态内存分配和释放,这些运算符具有构造和析构对象的功能。

6. 构造函数和析构函数

  • C语言:C不支持构造函数和析构函数,结构体的初始化需要手动完成。
  • C++:C++中的类可以有构造函数(对象创建时自动调用)和析构函数(对象销毁时自动调用),用于对象的初始化和清理工作。

7. 命名空间(namespace)

  • C语言:C不支持命名空间,多个全局变量和函数可能会发生命名冲突。
  • C++:C++引入了命名空间,通过namespace可以将函数和变量组织在一起,避免命名冲突。

8. 模板编程

  • C语言:C不支持模板编程。
  • C++:C++引入了模板,可以编写泛型函数和类,支持代码重用和类型安全。例如,模板可以实现类型无关的函数和容器。

9. 异常处理

  • C语言:C没有内置的异常处理机制。错误处理通常通过返回错误码或者设置全局变量来完成。
  • C++:C++支持异常处理机制,通过trythrowcatch块来处理运行时错误,使得代码更加清晰和健壮。

10. 引用(reference)

  • C语言:C只支持指针,不支持引用。
  • C++:C++引入了引用类型(reference),是一种更安全且更简洁的传递对象的方式,可以避免指针的一些常见错误(如空指针或指针操作中的内存泄漏问题)。

11. 兼容性

  • C语言:C是C++的子集,大部分C语言代码可以直接在C++中运行。
  • C++:C++是C的超集,但C++的一些特性(如类、模板等)在C中不可用。

12. 代码复杂性与应用领域

  • C语言:C的语法较为简单直接,适用于系统级编程,如操作系统开发、嵌入式系统、驱动程序等领域。
  • C++:C++功能更为复杂,适用于大型软件开发、游戏开发、高性能应用、GUI应用程序等。

 二、C++中的各种用法

 1、const用法

        在C语言中呢,我们使用const修饰值,表示这是一个不可更改常量,但是我们在C++中,const的用法和C语言中的#define用法一致,用来做宏定义

#include<stdio.h>
const int num=10;
int main(int argc, const char *argv[])
{
	int a;
	int b[num+1];
	b[num]=3;
	printf("hello c++\n");
	printf("num=%d\n",num);
	printf("b[num]=%d\n",b[num]);
	return 0;
}


/*输出:
hello c++
num=10
b[num]=3
*/

2、引用

1、引用变量

        引用:取别名,对原变量(数据),取一个别名,使用别名就是使用原变量名

        引用只能对变量名字进行引用,引用名也表示原变量名

        注意:引用需要与原变量的类型进行匹配

引用定义:必须初始化,必须引用一个变量名,不能空着,之后都是使用引用变量,不能再取别名

引用类型 & 引用名 = 变量名; // 引用类型 需要和 变量名匹配

如:
int a;

int & t_a = a;

2、引用常量(右值引用)

        在11版本中

        右值引用:对常量的引用,给常量取个别名,别名就可以代表这个常量数据

        (使用别名就使用数据,作为变量进行使用,别名就是变量名)

#include<cstdio>

//引用
int sum(int &&a,int &&b)
{

	return a;
}
int main(int argc, const char *argv[])
{
	int a=10;
	printf("a=%d\n",a);
	//定义引用变量
	int & t_a=a;
	t_a=20;
	printf("t_a=%d\n",t_a);
	int &&b=sum(1,2);
	printf("b=%d\n",b);
	return 0;
}

3、函数默认参数

        在C语言中,我们每次调用函数参数都得使用地址传递参数,但是在c++中,我们可以直接将函数的参数设置为默认值,如果在函数中不加参数,则使用默认参数,如果加入参数则使用加入的参数,这一点和python比较像,但是为了确保不会有二义性,在声明定义函数添加默认值时,需要从最后一个参数往前添加;在调用有默认值的参数时,添加实参从第一个依次往后添加;

4、内联函数

        在C语言中,我们在main函数中调用函数时,要先跳转到调用的函数中,才能执行该函数,在跳转过程中会消耗时间,虽然很短,但是对于计算机来说还是很长的,因此我们就说在C++中引入了内联函数的概念,缩短程序运行的时间,使用内联函数就是在定义函数的时候在前面加入一个关键字online,来表示这是一个内联函数,当我们在主函数中调用内联函数时,不会跳转到该函数中执行,而是直接在主函数中将内联函数展开,大大缩短了程序运行时间,但是注意,如果在调用的函数中使用了循环,那么我们将这个函数设置为内联函数有些多余了,我们使用循环时,程序的运行时间和跳转的时间相比,跳转的时间可以忽略不记,使用加入内联函数没有必要。

5、函数重载

        我们知道,在C语言中,不支持函数名重名,但是在C++中却支持函数名重名,但是这个重名有条件限制,否则还是无法区分函数。

        在C++中,如果我们定义了多个相同的函数名,那么这些函数名的参数个数和参数类型一定是不能相同的,不然还是会出现错误。

例如:

int add(int a,int b)
{}

int add(int a,int b,int c)
{}
//函数重载

函数名相同,函数个数不一致,在调用函数的时候就不会出现错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2132125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

揭秘Web3新纪元:算力共享平台如何重塑数字世界的力量源泉

目录 一、Web3:算力共享的新舞台 二、技术革新:解锁算力的无限潜能 三、应用场景:算力如何改变世界 四、未来展望:算力共享的无尽可能 在区块链技术的浪潮中,Web3.0的曙光正引领我们迈向一个前所未有的数字时代。而在这场变革的洪流中,基于Web3的算力共享平台犹如一股…

Redis集群_主从复制

Redis集群基本概念 在实际项目中&#xff0c;一般不会只在一台机器上部署redis服务器&#xff0c;因为单台redis服务器不能满足高并发的压力&#xff0c;另外如果该服务器或者redis失效&#xff0c;整个系统就可能崩溃项目里一般会用主从复制的模式来提升性能&#xff0c;用集…

“精装朋友圈”的年轻人,开始在40度高温买羽绒服

文 | 螳螂观察 作者 | 如意 人生一世&#xff0c;苦了自己也不能苦朋友圈。 这届的年轻人&#xff0c;无论人生有多“毛坯”&#xff0c;都有一个一生要强的朋友圈&#xff0c;而且“装修”朋友圈还有一套哲学&#xff0c;信奉图片精修&#xff0c;排版讲究&#xff0c;文案…

OpenAI o1 Review 大模型PHD水平数理推理能力 OpenAI o1 vs GPT4o vs Gemini vs Claude

1. 介绍 OpenAI昨天发布了o1推理优化的大模型&#xff0c;利用了CoT (Chain of Thought) 思维链推理机制&#xff0c;提升了针对数学/物理/编程/逻辑等复杂问题的推理能力。OpenAI官方网站评测 OpenAI o1大模型对比GPT4o的数学、编程能力有显著提升。我们利用DeepNLP的AI Stor…

2024.9.13 Python与图像处理新国大EE5731课程大作业,SIFT 特征和描述符,单应性矩阵透视变换

1.SIFT特征点和描述符 import cv2 import numpy as np import matplotlib.pyplot as plt # read image img cv2.imread(im01.jpg,cv2.IMREAD_COLOR) gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) plt.imshow(gray,plt.cm.gray)提取图片&#xff0c;以灰度图像输出 #SIFT sift…

【免费分享】OpenHarmony鸿蒙物联网开发板资料包一网打尽,附教程/视频/项目/源码...

想要深入学习鸿蒙设备开发及鸿蒙物联网开发吗&#xff1f;现在机会来了&#xff01;我们为初学者们准备了一份全面的资料包&#xff0c;包括原理图、教程、视频、项目、源码等&#xff0c;所有资料全部免费领取&#xff0c;课程视频可试看&#xff08;购买后看完整版&#xff0…

带你深入了解C语言指针(二)

目录 前言一、数组名的理解二、使用指针访问数组三、⼀维数组传参的本质四、冒泡排序五、二级指针六、指针数组七、 指针数组模拟⼆维数组总结 前言 前面我们基本了解了C语言指针的概念&#xff0c;也初步开启了指针的用处&#xff0c;这期我们主要围绕数 组展开&#xff0c;也…

学生请假管理系统

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 学生请假管理系统拥有两种角色 管理员&#xff1a;班级管理、课程管理、学生管理、审核请假信息、导出请假单 学生&#xff1a;填写请假单、查看请假审核情况 1.1 背景描述 学生请假管…

GIS应届生不考研,不考公,不考编,未来要怎么安排?

01 考公考研or就业 一直以来&#xff0c;大学生毕业去向的话题就居高不下。 近日&#xff0c;便有“不考研不考公&#xff0c;未来要怎么样&#xff1f;”的话题&#xff0c;出现在某社交媒体热榜&#xff0c;迅速引起54.5万人围观。 国内本科毕业后大学生的出路无外乎&…

什么空气净化器可以除猫毛?范罗士、希喂、小米、IAM、安德迈横测谁是毛克星

秋季掉毛季来咯&#xff0c;每入掉毛季&#xff0c;我们医院鱼油销量都暴涨。都是被家里猫猫、狗狗掉毛折腾得没办法了&#xff0c;想喂点鱼油&#xff0c;减少点掉毛。鱼油含有丰富的Ω-3&#xff0c;能够调节皮脂分泌&#xff0c;减轻炎症反应。平时喂点对宠物身体是有好处的…

矩阵引流助手有试用吗

矩阵引流助手有试用吗 还在为内容和流量曝光发愁吗&#xff1f;来了解一下矩阵工具让你事半功倍 #矩阵工具 #矩阵管理 #矩阵引流 推荐阅读&#xff1a; 短视频代运营代发 短视频代运营代发帖https://www.bsw80.com/post/111.html 抖音通过矩阵获客&#xff0c;我告诉大家新上…

Qt/C++ 了解NTFS文件系统,解析盘符引导扇区数据获取MFT(Master File Table)主文件表偏移地址

系列文章目录 一、Qt/C 了解NTFS文件系统&#xff0c;了解MFT(Master File Table)主文件表&#xff08;一&#xff09; 二、Qt/C 了解NTFS文件系统&#xff0c;解析盘符引导扇区数据获取MFT(Master File Table)主文件表偏移地址 目录导读 系列文章目录前言BOOTICE工具介绍读取…

防止文件外发泄密有什么方法?这7防外发方式可以看下!

防止文件外发泄密有什么方法&#xff1f; 一、使用防泄密软件外发&#xff1a;可对发送的文件进行权限设定。接收&#xff1a;可查看次数、可查看时间复制、修改、打印、外发受到限制。文件外发控制&#xff1a;以对外发的文件进行权限设定&#xff0c;如可打开的次数、可打开时…

基于JavaWeb开发的java ssm springboot+VUE疫情防疫系统系统前后端分离设计和实现

基于JavaWeb开发的java ssm springbootVUE疫情防疫系统系统前后端分离设计和实现 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取…

【深度学习】【OnnxRuntime】【Python】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【OnnxRuntime】【Python】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【OnnxRuntime】【Python】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转on…

文件系统(磁盘 磁盘文件 inode)

文章目录 磁盘看看物理磁盘磁盘的存储结构 对磁盘的储存进行逻辑抽象inode号文件名 -> inode判断文件在哪个分区 磁盘 电脑中存在非常多的文件&#xff0c;被打开的文件只是少量的。 没有被打开的文件&#xff0c;在磁盘中放着&#xff0c;那么文件是如何存取&#xff1f; …

Unity 之 【Android Unity FBO渲染】之 [Unity 渲染 Android 端播放的视频] 的一种方法简单整理

Unity 之 【Android Unity FBO渲染】之 [Unity 渲染 Android 端播放的视频] 的一种方法简单整理 目录 Unity 之 【Android Unity FBO渲染】之 [Unity 渲染 Android 端播放的视频] 的一种方法简单整理 一、简单介绍 二、FBO 简单介绍 三、案例实现原理 四、注意事项 五、简…

深度盘点PLM 项目管理系统哪家强?优缺点一目了然!

本文将盘点10款知名的PLM 项目管理系统&#xff0c;为企业选型提供参考&#xff01; 想象一下&#xff0c;在一个企业的产品研发过程中&#xff0c;各种数据、文档四处散落&#xff0c;不同部门之间沟通不畅&#xff0c;项目进度难以把控。这时&#xff0c;PLM 项目管理系统就如…

在线压缩图片地址

https://squoosh.app/editor这个是免费的&#xff0c;并且不限制图片数量 https://tinypng.com/ 这个限制图片的大小&#xff0c;如果单张图片超过5M需要收费 https://www.jpeg-optimizer.com/ https://imagecompressor.com/

再次进阶 舞台王者 第八季完美童模全球赛形象大使【于洪森】赛场秀场超燃合集!

7月20-23日&#xff0c;2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上&#xff0c;一位才能出众的少年——于洪森&#xff0c;迎来了他舞台生涯的璀璨时刻。 形象大使——于洪森&#xff0c;以璀璨童星之姿&#xff0c;优雅地踏上完美童模盛宴的绚丽舞台&am…