news 2026/5/12 17:32:10

C语言和C++语言最大的不同是什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言和C++语言最大的不同是什么?

C++语言是在C语言的基础上构建成的,C++这个名称寓意着C++是对C的超越和扩展。

但是,C语言和C++语言在设计哲学、编程范式和应用场景上存在着根本性的差异。

今天来讲讲这些差异,以期对程序员在开发项目时选择合适的工具起到一点帮助的作用。

一、C语言程序可以改成C++程序吗?

当然可以,因为C语言和C++语言完全兼容。

如果单纯的将C语言程序改成C++程序,好像很简单。

比如我们要完成这个程序:

输入一个圆的半径,输出圆面积和圆周长。

C语言程序如下:

程序1:

其中第2行:

#define PI 3.14159

是预处理,意思是给3.14159一个替代PI,也就是说在程序里,凡是出现PI的地方,就换成3.14159。

这样做有什么好处呢?

好处就是当你觉得想把3.14159改成3.1415926的时候,不需要到程序里面一行一行修改,只需修改这一个地方就可以了。

程序1运行结果:

改成C++程序:

程序2:

程序2运行结果:

运行结果跟程序1的区别在于它没法保证输出结果只有3位小数。

但是我们可以看到C++的输入输出流确实比C语言的输入输出方便,至少不用那些%f来匹配变量的数据类型。有关C和C++的输入输出区别,我在之前的文章《C++的输入输出流》里面讲述过,有兴趣的朋友们可以翻看那篇文章看看。

那么用cout来输出就不能指定小数位数了吗?是可以指定的。

在C++中,可以使用 头文件中的 std::fixed 和 std::setprecision 来指定小数位数:

std::fixed:固定小数格式,确保以小数形式输出

std::setprecision(n):设置小数点后保留 n 位数字

必须包含头文件和。

程序3:

程序3的运行结果和程序1的一样,输出数据保留了3位小数。

但是C语言和C++语言的不同并不是输入输出的区别。其实在C++程序中也可以用scanf和printf函数输入输出,只要引人的头文件是stdio.h就行。

二、C语言和C++语言的区别

C和C++最根本的区别在于其编程范式。

C语言是过程式语言,核心是面向过程编程,即它关注的是如何一步步地完成任务。

C程序由一系列的函数构成,C语言的核心是函数、结构体和指针。

C++的核心是面向对象编程,它关注的是“谁(对象)来完成任务”。

C++程序由一个个对象组成,对象将数据(成员变量)和操作这些数据的方法(成员函数)封装在一起。C++的核心是类、对象、继承和多态。

以下是它们的区别。

如果你是第一次接触C++,那么上面的术语肯定有很多看不懂,没关系,我们今天先讲什么是面向对象编程。

三、面向对象编程

先看以下几个基本概念:

(1) 类和对象

面向对象编程是把所有的问题都归结为一个一个的对象,所有同类型的对象就是同一个类。

(2) 数据成员和方法成员

类所具有的属性成为类的成员,其中静态属性成为数据成员,动态属性成为方法成员(也叫函数成员)。

举个例子,对于人来说,所有的人都有的静态特征(数据成员)就是身高、体重、血型等等,动态特征(方法成员)则是呼吸、吃饭、睡觉等。

如下图:

这有点像C语言的结构体类型,但是结构体类型没有动态成员,只有数据成员。

(3) 类成员的访问属性

常用的类成员访问属性有3种:

私有访问权限(private)

公有访问权限(public)

保护访问权限(protected)

今天只说私有访问权限和公有访问权限。

如果一个成员是私有访问权限,那么表示它只能在类内部使用。

如果是公有访问权限,那么它可以在任何地方使用。

一般数据成员定义为私有的,用private关键字定义,方法成员定义为公有的,用public定义。

这就好像一部手机,手机里面的cpu、芯片这些是数据成员,我们不能触碰,我们能触碰和使用的是关机、开机、调静音这些功能,这些功能就是方法成员,定义成公有的我们就可以触碰就可以使用。

四、用面向对象的方法编程求圆面积和半径

好,现在我们再来看看这个求圆面积和圆周长的程序。

如果用面向对象的方法来编写求圆面积和圆周长的程序,必须先定义一个类,即圆类,这个类里面的数据成员有什么?

当然就是半径、面积、周长。

方法成员有什么?

方法成员其实都是围绕数据成员来开展的,要不就是取出数据成员的值,要不就是改变数据成员的值。

方法成员为什么又叫函数成员,因为它就相当于C语言里的函数,它的存在就是针对数据成员来开展的,所以方法成员名后面也要括号。

比如圆的方法成员有

给半径赋值( ),求面积( ),求周长( )等。

所以一个圆类可以如下定义:

类定义如下:

从这个类定义来看,数据成员只要一个半径也可以了,面积和周长都可以通过半径求出来,所以数据成员可以删掉面积和周长。

在主函数里,就定义类圆的对象,如:

由这个对象调用类里面的方法成员完成项目所要求的功能,比如给x的半径赋值为10,则需用用对象名x来调用方法成员setR():

想输出面积,用对象名x来调用方法成员fa( ):

具体程序如下。

程序4:

运行结果:

这就是面向对象的编程方法,与面向过程的编程方法有本质的区别。

五、总结

面向过程的编程方法(C语言)和面向对象的编程方法(C++)是不同的。

面向过程的编程步骤:

1、定义变量;

2、输入数据;

3、数据处理;

4、输出结果。

面向对象的编程步骤:

1、定义一个类:

(1)定义类里面的数据成员;

(2)定义类里面的方法成员,给出方法成员的实现代码。

2、在主函数定义类的对象;

3、用类对象调用类成员。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 17:31:38

# 016、AutoSAR CP操作系统(OS)配置与任务调度:那个让我加班到凌晨三点的调度死锁

上周在联调ECU唤醒流程时,遇到一个诡异现象:系统唤醒后运行几分钟就卡死,仿真器显示所有任务都停在WaitEvent状态。抓了三天Trace才发现,是OS任务优先级配反了——高优先级任务等低优先级任务释放资源,低优先级任务又被中等优先级任务抢占,经典的优先级反转没处理好。今天…

作者头像 李华
网站建设 2026/4/17 21:34:41

KDMapper终极指南:Windows内核驱动手动映射完全解析

KDMapper终极指南:Windows内核驱动手动映射完全解析 【免费下载链接】kdmapper KDMapper is a simple tool that exploits iqvw64e.sys Intel driver to manually map non-signed drivers in memory 项目地址: https://gitcode.com/gh_mirrors/kd/kdmapper 还…

作者头像 李华
网站建设 2026/4/15 12:46:00

数据结构中逻辑结构和存储结构对应有哪些

逻辑结构(数据之间的抽象关系) 存储结构(这些关系在计算机内存中的具体实现方式) 数据结构一、逻辑结构(完整分类)注:集合结构有时单独列出,有时归入非线性结构。类别子类型典型例…

作者头像 李华
网站建设 2026/4/16 3:29:04

NOR Flash与NAND Flash

NOR Flash与NAND Flash详细解析及应用案例NOR Flash(或非闪存)和NAND Flash(与非闪存)是两种主流的非易失性存储技术,二者均能在断电后保留数据,是嵌入式系统、消费电子、工业设备等领域的核心存储组件。二…

作者头像 李华
网站建设 2026/4/15 16:19:25

PyTorch实战指南:深入理解卷积层的参数调优与图像处理

1. 卷积层基础:从图像处理到参数理解 第一次接触卷积层时,我和大多数初学者一样被各种参数搞得头晕眼花。直到有天深夜调试代码时突然顿悟:卷积本质上就是拿着放大镜在图片上找特征的过程。想象你拿着一个3x3的小窗口(卷积核&…

作者头像 李华