首页 > 编程语言 >C++的介绍及与C语言的对比

C++的介绍及与C语言的对比

时间:2024-04-17 12:55:31浏览次数:26  
标签:文件 编译 C++ C语言 面向对象 源代码 对比

目录

一.C语言与C++

C语言

C语言是为开发Unix系统而创建的语言,它是一种面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。它贴近硬件,运行速度快,是系统级编程语言,底层高级语言。

C++语言

C++可以说是C语言的增强版,它扩展自C语言,并添加了面向对象编程的特性。C++具备以下特点:

  • 兼容性与扩展性:C++既保留了C语言的低级特性和指针操作,又增加了高级编程的特性,如面向对象编程。这使得C++能够很好地兼容C语言,同时提供更丰富的编程接口和功能

  • 面向对象:C++支持类和对象的概念,允许程序员定义自己的数据类型,并实现继承、封装和多态等面向对象特性。这提高了代码的可重用性和可维护性。

  • 模板/泛型编程:C++引入了模板的概念,支持泛型编程,这使得代码更具灵活性和可重用性。通过模板,可以编写与数据类型无关的代码,从而提高开发效率。

  • 高效性能:C++是一种编译型语言,代码在运行前会进行优化,因此执行效率非常高。这使得C++在开发对性能要求较高的应用(如游戏、嵌入式系统等)时具有显著优势。

  • 可移植性:C++编写的程序可以在多种操作系统和平台上运行,具有很好的可移植性。

二.面向过程和面向对象

面向过程

面向过程(Procedure Oriented,简称PO)是一种以过程为中心的编程思想。它强调通过一系列有序的步骤或过程来解决问题。在面向过程的程序中,数据和对数据的操作是分离的。这种编程方法主要关注的是“怎么做”,即如何通过明确的步骤和算法来完成任务。

面向对象

面向对象(Object Oriented,简称OO)是一种以对象为基础的编程思想。它将数据和相关操作封装在一个对象(类)中,使得对象能够作为一个整体被处理。面向对象编程主要关注的是“谁来做”,即哪个对象应该负责完成特定的任务。这种方法更符合人类的思维方式,有助于提高代码的可读性和可维护性。

对象是类的实例,类中封装了数据的定义和数据的操作方法

面向过程与面向对象的区别

  • 编程思想不同:面向过程以过程或函数为中心,而面向对象以对象为中心。

  • 数据与操作的关联方式不同:在面向过程中,数据和对数据的操作是分离的;而在面向对象中,数据和相关操作被封装在同一个对象中。

  • 模块化程度不同:面向对象比面向过程具有更高的模块化程度。在面向对象中,每个对象都可以看作是一个独立的模块,具有更好的复用性和可扩展性。

  • 可维护性不同:由于面向对象将数据和相关操作封装在一起,因此当数据或操作发生改变时,只需要修改相应的对象,而不需要对整个程序进行大规模的修改。这使得面向对象的程序更易于维护和修改。

  • 性能考虑不同:面向过程的程序通常比面向对象的程序具有更高的执行效率,因为面向过程的程序在执行时不需要进行对象的创建和销毁等操作。然而,随着计算机硬件性能的不断提升,这种性能差异在大多数情况下已经变得不再显著。

三.C++的应用领域

  • 桌面应用:主要基于Windows平台的应用

  • 系统级软件:操作系统,驱动程序,数据库,网络协议

  • 底层架构:Java虚拟机,python解释器,AI核心库

  • 游戏开发:游戏引擎,服务器端,客户端

  • 嵌入式开发:工业控制,智能家电,航空航天,电子通讯

四.Cpp的运行和标准

1.编译型语言和解释型语言

  • 编译型语言:编译器将源代码翻译成机器码,最终生成二进制文件,提交给计算机执行。C和C++都是典型的编译型语言。

  • 解释型语言:解释器将代码逐行解释成机器码,并交给计算机执行。代表:Python,JavaScript

2.C++的运行过程及相关文件解释

编写C++代码 (.cpp文件) --> 预处理 --> 编译(.obj文件) --> 链接 --> 生成可执行文件(.exe文件) --> 执行程序
  • .cpp文件:它是C++语言编写的程序源文件

  • .obj文件:.cpp文件被编译后生成的文件

  • .exe文件:可执行文件,在windows系统中用户双击即可运行

C++代码运行的基本过程

  • 1.编写代码:首先,开发者需要使用文本编辑器或集成开发环境(IDE)来编写C++源代码。这些代码保存在以.cpp为扩展名的文件中。

  • 2.预处理:在编译之前,C++预处理器会处理源代码中的预处理指令。这些指令通常以#开头,如#include, #define等。预处理器会将包含的头文件内容替换到源代码中,并处理宏定义等。

  • 3.编译:编译器读取经过预处理的源代码,并将其转换成汇编语言或机器代码。在这个过程中,编译器会检查语法错误、类型不匹配等问题,并优化代码以提高运行效率。如果编译成功,会生成一个或多个目标文件(通常是.o或.obj文件),这些文件包含程序的机器代码版本。

  • 4.链接:链接器将编译生成的目标文件与必要的库文件组合在一起,形成一个完整的可执行程序。链接器解决程序中的符号引用问题,确保所有调用的函数和全局变量都能正确解析。

  • 5.执行:一旦链接成功,就会生成一个可执行文件(在Windows上通常是.exe文件,在Unix-like系统上则没有扩展名或可能是.elf等)。运行这个可执行文件会启动程序,操作系统的加载器会将程序加载到内存中,并由CPU执行其中的指令。

C与C++的运行过程基本相同,区别主要在于生成的文件不同

  • 源代码文件:C语言的源代码文件为.c ; C++的源代码文件为.cpp

  • 编译文件:C语言的编译文件为.o ; C++的编译文件为.obj

标签:文件,编译,C++,C语言,面向对象,源代码,对比
From: https://www.cnblogs.com/sillyfox/p/18140348

相关文章

  • c语言 复习 1
    1printf函数1参数两个(字符串,占位符对应的变量)常见占位符%c字符类型%s字符串类型%dint%ldlong%ffloat%lfdouble%o八进制%u十进制无符号整数%x十六进制无符号整数%p指针常见变量类型基本数据类型整形short/int/long字节数byte2/4/4or8位数bit16......
  • 结对编程(c语言)
    作业要求:小学老师要每周给同学出300道四则运算练习题。选择c语言进行实现–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置一些条件也可以让同学们自选一个小应用程序进行结对编程的开发请两位同学以结对编码(......
  • 结对编程-c++四则运算
    题目:小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置......
  • 结对编程-C++四则运算
    小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置一......
  • 开源OCR模型对比
    引言目前,开源的项目中有很多OCR模型,但是没有一个统一的基准来衡量哪个是更好一些的。面对这么多的模型,让我们有些不知所措。为此,最近一段时间以来,我一直想要构建这样一个基准,现在来看,已经初步具有雏形。为了能更好地评测各个模型效果,收集标注了两个开源评测集:text_det_test......
  • C++ 递归与面向对象编程基础
    C++递归递归是一种使函数调用自身的技术。这种技术提供了一种将复杂问题分解为简单问题的方法,从而更容易解决问题。递归可能有点难以理解。理解其工作原理的最佳方法是通过实验来尝试。递归示例将两个数字相加很容易做到,但将一系列数字相加就更复杂了。在下面的示例中,通过将......
  • 【编译原理】正则式转NFA转DFA 代码实现(C/C++)
    直接上代码:#include<bits/stdc++.h>usingnamespacestd;//nfa结构定义structnst{vector<int>a[26],e;//接收a-z会到达的状态,接收eps会到达的状态boolf=0;//=0为可接受态};vector<nst>nfa;set<char>alp;stringstr;set<int>accepted;struc......
  • C++定义,继承和虚函数
    类定义方式一般有两种Baseb和Baseb(3);一种不带参数,一种带参数,这两种实例定义会在范围结束自动释放。Base*c=newBase;和Base*c=newBase(5);没有参数可不加括号。通过new申请的类,需要手动delete释放,否则需要关闭程序才会释放(说的内存泄漏是指程序一直运行期间不断产生......
  • C++ list erase
    原文:https://www.cnblogs.com/yelongsan/p/4050404.htmlSTL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。      在使用list、set或m......
  • 深度解读《深度探索C++对象模型》之默认构造函数
    接下来我将持续更新“深度解读《深度探索C++对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,主动获得推文。提到默认构造函数,很多文章和书籍里提到:“在需要的时候编译器会自动生成一个默认构造函数”。那么关键的问题来了,到底是什么时候需要?是谁需要?比如下面的......