当前位置: 首页 > news >正文

c++和c的不同

c++:面向对象(封装,继承,多态),STL,模板

一、基础定义与背景

C语言

  • 诞生年代:20世纪70年代,Dennis Ritchie在贝尔实验室开发。
  • 主要特点
    • 过程式、结构化编程
    • 面向系统底层开发(操作系统、嵌入式系统)
    • 高效、灵活、接近硬件
    • 标准库较小,功能有限
  • 编程思想:强调“做什么”——步骤清晰,硬件级别操作

C++语言

  • 诞生年代:20世纪80年代初,由Bjarne Stroustrup在C基础上开发的
  • 主要特点
    • 在C基础添加了面向对象(OOP)支持
    • 引入泛型编程(模板)
    • 提供异常机制
    • 丰富的标准模板库(STL)
    • 多范式(面向对象、泛型、函数式、命令式)
  • 编程思想:更高级别的抽象(“做什么”与“怎么做”解耦)

二、从语法和特性上详细对比

类别C 语言特性C++ 语言新增特性说明
程序范式过程式支持过程式、面向对象、泛型、函数式多范式支持
数据抽象结构体(struct类(class)支持封装、隐藏可以定义私有成员、保护成员
继承与多态不支持支持(单继承、多继承、虚函数、多态)支持面向对象设计的多态性
函数特性普通函数支持函数重载、虚函数、纯虚函数、默认参数强大灵活,支持不同参数版本
模板机制不支持支持(函数模板、类模板)编写通用容器和算法,代码复用
异常处理不支持(错误码处理)支持(try-catch机制)提升程序的健壮性
命名空间不支持支持(namespace避免命名冲突,结构更清晰
标准库stdio.hstdlib.h 等引入<iostream><vector><map><algorithm>大幅度丰富,方便开发
内存管理主要用malloc()free()支持newdelete,以及智能指针(从C++11开始)提供更高效安全的内存管理
多重继承不支持支持实现复杂对象关系
数据封装与访问控制只能通过结构体成员访问支持privateprotectedpublic更好的数据隐藏和封装

三、设计思想与应用层面差异

  • 底层接近 vs 高层抽象

    • C偏底层,直接操作内存和硬件
    • C++强调抽象与重用,适合复杂系统开发
  • 开发效率

    • C代码写在硬件控制、驱动程序
    • C++借助STL、面向对象以及模板,可以大大缩短开发时间,提高维护性
  • 代码复用

    • C通过函数、头文件“共享”代码
    • C++支持继承和模板,实现更灵活的复用

四、具体关键特性比较逐点分析

1. 面向对象支持

  • C:不支持面向对象,程序依赖数据和代码的组合实现功能
  • C++:支持类、继承、多态、抽象、封装,允许你用“对象”描述问题,更接近人类认知

2. 函数重载

  • C:不能定义多个同名但参数不同的函数
  • C++:支持重载(一个函数可以有多个不同参数版本)

3. 作用域和命名空间

  • C:全局作用域
  • C++:用namespace避免命名冲突,比如std::空间

4. 模板和泛型编程

  • C:没有模板机制
  • C++:支持模板,可以编写通用函数和类(如vector<T>

5. 异常机制

  • C:错误处理方式单一,多用返回值或全局变量
  • C++:提供try-catch机制,更优雅地应对错误

6. 标准库丰富程度

  • C:较少,主要函数在<stdio.h><stdlib.h>
  • C++:标准库极其丰富,如IO流(<iostream>)、容器(<vector><map>)、算法(<algorithm>

7. 内存管理

  • C:手动控制,malloc()free()
  • C++newdelete,而且引入智能指针(如shared_ptrunique_ptr),避免内存泄漏

8. 继承和多态

  • C:不支持
  • C++:支持类继承、多态调用(虚函数实现动态联结)

9. 访问控制

  • C:结构体成员通常全部公开
  • C++:可以定义成员的访问权限(privateprotectedpublic

五、总结

  • C:适合系统底层、硬件开发,追求极致性能和简洁
  • C++:适合开发大型复杂应用、游戏引擎、数据库、插件,代码更易维护和复用

六、补充思考

  • 为什么学C语言?
    • 理解底层原理,掌握硬件操作
    • 作为学习C++的基础,不可或缺
  • 为什么学C++?
    • 面向对象编程能力,支持现代软件工程
    • 利用STL、模板快速开发高效代码

相关文章:

c++和c的不同

c:面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff0c;STL&#xff0c;模板 一、基础定义与背景 C语言 诞生年代&#xff1a;20世纪70年代&#xff0c;Dennis Ritchie在贝尔实验室开发。主要特点&#xff1a; 过程式、结构化编程面向系统底层…...

光流 | Matlab工具中的光流算法

在MATLAB中,光流算法用于估计图像序列中物体的运动。以下是详细解释及实现步骤: 1. 光流算法基础 光流基于两个核心假设: 亮度恒定:同一物体在连续帧中的像素亮度不变。微小运动:相邻帧之间的时间间隔短,物体运动幅度小。常见算法: Lucas-Kanade (局部方法):假设局部窗…...

@Controller 与 @RestController-笔记

1.Controller与RestController对比 Spring MVC 中 Controller 与 RestController 的功能对比&#xff1a; Controller是Spring MVC中用于标识一个类作为控制器的标准注解。它允许处理HTTP请求&#xff0c;并返回视图名称&#xff0c;通常和视图解析器一起使用来渲染页面。而R…...

LeetCode 热题 100 105. 从前序与中序遍历序列构造二叉树

LeetCode 热题 100 | 105. 从前序与中序遍历序列构造二叉树 大家好&#xff0c;今天我们来解决一道经典的二叉树问题——从前序与中序遍历序列构造二叉树。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求根据给定的前序遍历和中序遍历序列&#xff0c;构造并返回二叉树…...

IP地址查询助力业务增长

IP地址查询的技术基石 IP地址分为IPv4和IPv6&#xff0c;目前IPv4仍广泛应用&#xff0c;它由四个0-255的十进制数组成&#xff0c;如192.168.1.1。而IPv6为应对IPv4地址枯竭问题而生&#xff0c;采用128位地址长度&#xff0c;极大扩充了地址空间。IP地址查询主要依赖庞大的I…...

Nginx核心功能及同类产品对比

Nginx 作为一款高性能的 Web 服务器和反向代理工具&#xff0c;凭借其独特的架构设计和丰富的功能&#xff0c;成为互联网基础设施中不可或缺的组件。以下是其核心功能及与同类产品&#xff08;如 HAProxy、LVS&#xff09;的对比优势&#xff1a; 一、Nginx 核心功能 高性能架…...

抽奖系统-奖品-活动

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言获取奖品列表前端页面活动创建需求分析活动创建后端实现1-控制层实现及校验活动活动创建后端实现2-保存信息活动插入活动奖品插入 整合活动信息存入redis测试活…...

【Java】 volatile 和 synchronized 的比较及使用场景

在 Java 的并发编程中&#xff0c;volatile 和 synchronized 是两个常用的关键字&#xff0c;它们分别用于保证多线程环境中的 可见性 和 原子性&#xff0c;但它们的工作原理和适用场景却有所不同。今天&#xff0c;我们将深入探讨这两个关键字的异同&#xff0c;帮助大家理解…...

javaScript简单版

简介 JavaScript&#xff08;简称:JS)是一门跨平台、面向对象的脚本语言&#xff0c;是用来控制网页行为&#xff0c;实现页面的交互效果。 JavaScript和Java是完全不同的语言&#xff0c;不论是概念还是设计。但是基础语法类似。 组成: ECMAScript:规定了JS基础语法核心知…...

三种常见接口测试工具(Apipost、Apifox、Postman)

三种常见接口测试工具&#xff08;Apipost、Apifox、Postman&#xff09;的用法及优缺点对比总结&#xff1a; &#x1f527; 一、Apipost ✅ 基本用法 支持 RESTful API、GraphQL、WebSocket 等接口调试自动生成接口文档支持环境变量、接口分组、接口测试用例编写可进行前置…...

蓝桥杯13届国B 完全日期

题目描述。 如果一个日期中年月日的各位数字之和是完全平方数&#xff0c;则称为一个完全日期。 例如&#xff1a;2021 年 6 月 5 日的各位数字之和为 20216516&#xff0c;而 16 是一个完全平方数&#xff0c;它是 4 的平方。所以 2021 年 6 月 5 日是一个完全日期。 例如&…...

kafka connect 大概了解

kafka connect Introduction Kafka Connect is the component of Kafka that provides data integration between databases, key-value stores, search indexes, file systems, and Kafka brokers. kafka connect 是一个框架&#xff0c;用来帮助集成其他系统的数据到kafka…...

嵌入式培训之数据结构学习(三)gdb调试、单向链表练习、顺序表与链表对比

目录 一、gdb调试 &#xff08;一&#xff09;一般调试步骤与命令 &#xff08;二&#xff09;找段错误&#xff08;无下断点的地方&#xff09; &#xff08;三&#xff09;调试命令 二、单向链表练习 1、查找链表的中间结点&#xff08;用快慢指针&#xff09; 2、找出…...

MySQL——九、锁

分类 全局锁表级锁行级锁 全局锁 做全库的逻辑备份 flush tables with read lock; unlock tables;在InnoDB引擎中&#xff0c;我们可以在备份时加上参数–single-transaction参数来完成不加锁的一致性数据备份 mysqldump --single-transaction -uroot -p123456 itcast>…...

精益数据分析(57/126):创业移情阶段的核心要点与实践方法

精益数据分析&#xff08;57/126&#xff09;&#xff1a;创业移情阶段的核心要点与实践方法 在创业的浩瀚征程中&#xff0c;每一个阶段都承载着独特的使命与挑战。今天&#xff0c;我们继续秉持共同进步的理念&#xff0c;深入研读《精益数据分析》&#xff0c;聚焦创业的首…...

服务器被打了怎么应对

云服务器遭受攻击该如何应对&#xff1f; 在互联网时代&#xff0c;不少使用云服务器的网络工作者常常会面临网络攻击的威胁。若云服务器未配置完善的防火墙&#xff0c;极易引发服务器宕机&#xff0c;甚至被封禁隔离&#xff08;俗称“陷入黑洞”&#xff09;&#xff0c;进…...

Halcon案例(二):C#联合Halcon回形针以及方向

本案例分3部分 识别效果,分别显示识别前后识别后;代码展示,分别是Halcon源码和Halcon转为C#的代码代码解释(解释在源码中); 原图如下 识别后图像: 其中计算回形针与X轴之间的夹角 Halcon代码: * clip.hdev: Orientation of clips *识别图像中的回形针,并且计算回形针与X轴之间…...

Spyglass:跨时钟域同步(同步单元)

相关阅读 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 简介 同步单元方案可以用于控制/数据信号跨时钟域同步&#xff0c;该方案使用约束或参数将目标时钟域中单元指定为同步单元&#xff0c;如图1所示。 图1 同步单元方案…...

JAVA异常体系

在 Java 里&#xff0c;异常体系是其错误处理机制的核心内容&#xff0c;它能够帮助开发者有效应对程序运行时出现的各种意外状况。 异常体系的基本架构 它主要包含两个重要分支&#xff1a; Error&#xff08;错误&#xff09;&#xff1a;这类异常是程序自身无法处理的严重…...

Milvus 视角看主流嵌入式模型(Embeddings)

嵌入是一种机器学习概念&#xff0c;用于将数据映射到高维空间&#xff0c;其中语义相似的数据被紧密排列在一起。嵌入模型通常是 BERT 或其他 Transformer 系列的深度神经网络&#xff0c;它能够有效地用一系列数字&#xff08;称为向量&#xff09;来表示文本、图像和其他数据…...

全面解析 Server-Sent Events(SSE)协议:从大模型流式输出到实时通信场景

全面解析 Server-Sent Events&#xff08;SSE&#xff09;协议&#xff1a;从大模型流式输出到实时通信场景 一、SSE 协议概述 Server-Sent Events&#xff08;SSE&#xff09; 是 HTML5 标准中定义的一种基于 HTTP 的服务器向客户端单向推送实时数据的协议。其核心特性包括&a…...

数据库系统概论|第七章:数据库设计—课程笔记

前言 本章讨论数据库设计的技术和方法&#xff0c;主要讨论基于关系数据库管理系统的关系数据库设计问题&#xff0c;而关于数据库的设计过程中&#xff0c;关于数据模型、关系模型等基本概念在前文中已经有详尽介绍&#xff0c;此处便不再赘述&#xff0c;本文主要围绕概念结…...

Java项目拷打(外卖+点评)

一、点评星球&#xff08;黑马点评&#xff09; 1、项目概述 1.1、项目简介 本项目是基于Spring Boot与Redis深度整合的前后端分离的点评平台。系统以Redis为核心技术支撑&#xff0c;重点解决高并发场景下的缓存穿透、击穿、雪崩等问题&#xff0c;涵盖商户展示、优惠券秒杀…...

MCP:开启AI的“万物互联”时代

MCP&#xff1a;开启AI的“万物互联”时代 ——从协议标准到生态革命的技术跃迁 引言&#xff1a;AI的“最后一公里”困境 在2025年的AI技术浪潮中&#xff0c;大模型已从参数竞赛转向应用落地之争。尽管模型能生成流畅的对话、创作诗歌甚至编写代码&#xff0c;但用户逐渐发现…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-D. 扩展插件列表(PostGIS/PostgREST等)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 附录D. PostgreSQL扩展插件速查表一、插件分类速查表二、核心插件详解三、安装与配置指南四、应用场景模板五、版本兼容性说明六、维护与优化建议七、官方资源与工具八、附录…...

Spring Boot拦截器详解:原理、实现与应用场景

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、拦截器概述 拦截器&#xff08;Interceptor&#xff09;是Spring MVC框架中用于对请求进行预处理和后处理的组件&#xff0c;主要作用于Controller层。相…...

万字解析:Java字符串

目录 一、 String类 1. String类的初始化 1.1 常用的三种构造String类的方式 1.2 String类如何存储字符串&#xff1f; 2. String类的常用功能方法 2.0 字符串长度的获取 2.1 String对象的比较 2.2 字符/字符串的查找 2.3 字符串的转化 2.4 字符 / 字符串的替换 2.5…...

0514得物、0509滴滴面试总结复盘

目前最欠缺的还是&#xff0c;编码不是很熟&#xff0c;很多都遇到过但是就是写不出来&#xff0c;或者靠背先写一点&#xff0c;然后去加&#xff0c;加的过程没考虑逻辑是不是对的&#xff0c;用滴滴面试官的一句话&#xff0c;就是多刷多练多编码&#xff01; 第二块就是项目…...

记录算法笔记(20025.5.14)对称二叉树

给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 提示&#xff1a; 树中节点数目…...

AI大模型从0到1记录学习 linux day23

第 1 章 MySQL概述 1.1 基本概念 1.1.1 数据库是什么&#xff1f; 数据库&#xff08;DB&#xff1a;Database&#xff09;&#xff1a;存储数据的地方。 1.1.2 为什么要用数据库&#xff1f; 应用程序产生的数据是在内存中的&#xff0c;如果程序退出或者是断电了&#xff0c;…...

用git下载vcpkg时出现Connection was reset时的处理

用git安装vcpkg时出现Connect was rest&#xff08;如上图&#xff09;。多谢这位网友的博文解决了问题&#xff1a; 通过:http.sslVerify false全局来设置&#xff0c;执行以下命令&#xff1a; git config --global http.sslVerify "false" 原文链接&#xff1a…...

【数据库复习】SQL语言

一、SQL通用语法与分类 &#xff08;一&#xff09;SQL通用语法 SQL语句的格式通常较为规范&#xff0c;以关键字开头&#xff0c;如CREATE、SELECT、INSERT等&#xff0c;后跟具体的表名、字段名和条件等。在MySQL中&#xff0c;还可以使用help命令获取帮助信息&#xff0c;…...

二叉树——层序遍历

目录 实现层序遍历 判断是否为完全二叉树 实现层序遍历 除了先序遍历&#xff0c;中序遍历&#xff0c;后序遍历外&#xff0c;还可以对二叉树进行层序遍历。设二叉树的结点所在层数为1&#xff0c;层序遍历就是从所在二叉树的根结点出发&#xff0c;首先访问第一层的树根结点…...

Seata源码—2.seata-samples项目介绍

大纲 1.seata-samples的配置文件和启动类 2.seata-samples业务服务启动时的核心工作 3.seata-samples库存服务的连接池配置 4.Seata对数据库连接池代理配置的分析 5.Dubbo RPC通信过程中传递全局事务XID 6.Seata跟Dubbo整合的Filter(基于SPI机制) 7.seata-samples的AT事…...

企业数字化转型背景下的企业知识管理挑战与经验杂谈

一、引言 在数字化转型的浪潮下&#xff0c;企业知识管理正面临前所未有的挑战。随着数据量的急剧增长&#xff0c;企业内部积累的信息呈现出碎片化、分散化的趋势&#xff0c;传统的知识管理体系已难以有效应对这一变革。首先&#xff0c;信息碎片化问题日益严重&#xff0c;…...

第二章:磁盘管理与文件管理

一、磁盘管理 1.windows和Linux磁盘管理的区别 windows资源管理方式 系统一般安装在C盘 C盘下的"Windows"目录是操作系统的核心 C盘下的"Program Files"目录下安装软件 C盘下的"用户"目录是所有的用户&#xff0c;包括超级管理员也在其中 …...

Java版OA管理系统源码 手机版OA系统源码

Java版OA管理系统源码 手机版OA系统源码 一&#xff1a;OA系统的主要优势 1. 提升效率 减少纸质流程和重复性工作&#xff0c;自动化处理常规事务&#xff0c;缩短响应时间。 2. 降低成本 节省纸张、打印、通讯及人力成本&#xff0c;优化资源分配。 3. 规范管理 固化企…...

springboot踩坑记录

之前运行好端端的项目&#xff0c;今天下午打开只是添加了一个文件之后 再运行都报Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver class Action: Conside…...

SpringAI

机器学习&#xff1a; 定义&#xff1a;人工智能的子领域&#xff0c;通过数据驱动的方法让计算机学习规律&#xff0c;进行预测或决策。 核心方法&#xff1a; 监督学习&#xff08;如线性回归、SVM&#xff09;。 无监督学习&#xff08;如聚类、降维&#xff09;。 强化学…...

acwing 1488. 最短距离 超级源点 最短路 堆优化Dijkstra

经验总结 邻接表 节点1连接到节点2&#xff0c;权重为3。 节点1连接到节点3&#xff0c;权重为5。 节点2连接到节点4&#xff0c;权重为2。 g[1] {{2, 3}, {3, 5}} g[2] {{1, 3}, {4, 2}} g[3] {{1, 5}} g[4] {{2, 2}} vector<vector<PII>> g;题目背景 有 N…...

2002-2024年地级市新质生产力词频统计数据(46个关键词词频)

2002-2024年地级市新质生产力词频统计数据&#xff08;46个关键词词频&#xff09; 1、时间&#xff1a;2002-2024年 2、来源&#xff1a;ZF工作报告 3、指标&#xff1a;行政区划代码、年份、地区、所属省份、文本总长度、仅中英文-文本总长度、文本总词频-全模式、文本总词…...

院校机试刷题第二天:1479 01字符串、1701非素数个数

一、1479 01字符串 1.题目描述 2.解题思路 方法一&#xff1a;暴力法 模拟过程&#xff0c;列出几个数据来a[1]1, a[2]2, a[3]3, a[4]5以此类推&#xff0c;这就是斐波那契数列&#xff0c;每一项都等于前两项之和&#xff0c;确定好a[1], a[2]即可。 方法二&#xff1a;动…...

2011-2019年各省总抚养比数据

2011-2019年各省总抚养比数据 1、时间&#xff1a;2011-2019年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;行政区划代码、地区、年份、总抚养比(人口抽样调查)(%) 4、范围&#xff1a;31省 5、指标解释&#xff1a;总抚养比也称总负担系数。指人口总体中非劳动年…...

3337|3335. 字符串转换后的长度 I(||)

1.字符串转换后的长度 I 1.1题目 3335. 字符串转换后的长度 I - 力扣&#xff08;LeetCode&#xff09; 1.2解析 递推法解析 思路框架 我们可以通过定义状态变量来追踪每次转换后各字符的数量变化。具体地&#xff0c;定义状态函数 f(i,c) 表示经过 i 次转换后&#xff0…...

【电路笔记 通信】8B/10B编码 高速数据传输的串行数据编码技术 论文第三部分 The 8B/10B coding map

0810逻辑总览 The 8B/10B coding map 图 1 展示了一个通信适配器接口&#xff0c;它由八条数据线 A、B、C、D、E、F、G、H&#xff08;注意&#xff1a;使用大写字母表示&#xff09;、一条控制线 K&#xff0c;以及一条以字节速率运行的时钟线 BYTECLK 组成。控制线 K 用于指…...

智能化双语LaTeX系统,分阶段系统性开发技术实现路径:目标是实现语义级编译和认知增强写作,推动跨文明知识表达

智能化双语LaTeX系统&#xff0c;分阶段系统性开发技术实现路径&#xff08;D认为W可辅助各环节开发&#xff09;&#xff1a; 第一阶段&#xff1a;双语LaTeX引擎升级 1. 核心架构设计 Unicode深度支持 开发新一代XeLaTeX/LuaLaTeX内核 原生支持UTF-8编码&#xff08;如汉…...

【RabbitMQ】路由模式和通配符模式的具体实现

文章目录 路由模式创建队列和交换机生产者代码创建交换机声明队列绑定交换机和队列发送消息完整代码 消费者代码运行程序启动生产者启动消费者 通配符模式创建队列和交换机生产者代码创建交换机声明队列绑定交换机和队列发送消息完整代码 消费者代码运行程序启动生产者启动消费…...

【测试开发知识储备】之Jacoco(Java Code Coverage)

文章目录 Jacoco是什么Jacoco的主要功能&#xff08;一&#xff09;多样化覆盖率指标分析&#xff08;二&#xff09; 丰富的报告生成&#xff08;三&#xff09;实时数据收集 Jacoco的工作原理&#xff08;一&#xff09;字节码增强&#xff08;二&#xff09;测试执行与数据收…...

大二java第一面小厂(挂)

第一场&#xff1a; mybatis怎么防止数据转义。 Hutool用的那些你常用的方法。 springboot的常用注解。 redis的多级缓存。 websocket怎么实现的多人协作编辑功能。 怎么实现的分库分表。 mysql里面的各种操作&#xff0c;比如说分表怎么分&#xff0c;分页查询怎么用。 mybat…...

Postman接口测试

现在企业级测试分为三层测试 UI层&#xff1a;即与用户交互的层面 Service层&#xff1a;比如前后端分离的系统&#xff0c;测试数据的传输 Unit层&#xff1a;单元测试 接口 接口的概念很抽象&#xff0c;比如我们经常使用的USB接口&#xff0c;Lighting接口等传输电量数据…...