C++相比于C语言增加了哪些概念?

作者将狼才鲸
创建日期2025-06-17
  • CSDN阅读地址:C++相比于C语言增加了哪些概念?
  • Gitee源码目录:qemu/demo_代码示例/02_C++_Class

  • 目标受众:熟悉C语言,对C++完全不了解,但又想熟悉一下C++语言的人;

  • 参考网址:

    • 【C/C++语言】class的定义和基础用法
    • C++相比于C语言增加的8个小特性(详解)
  • C++虽然是面向对象的,但是它的第一个函数,main()函数却是和C语言一样面向过程的;

  • 基础概念:

    • 类 Class:例如声明一个Class Demo;类似于C语言中的结构体;声明表示还没有创建实体,不占内存;
    • 私有变量 private:类似于C语言模块内部static全局变量;
    • 公共变量 public:类似于C语言模块中接口函数;
    • 构造函数:Demo (int aa) {a = aa;} 定义类时会自动执行的初始化函数,C语言中没有此概念;
      • Demo(int aa = 100): a(aa) {} 可以直接用默认值初始化;
      • 构造函数中: 冒号后面的a(aa) 类似于函数的这种模式其实并不是函数,而只是赋值,类似于aa = a;
    • 析构函数,~Demo:同上,在类被delete时自动调用;
    • Class声明中直接实现函数: void geta(int b) {a = b;} 类似于C语言.h头文件中的inline内联函数;
    • 友元函数 friend:稍微突破模块化的结构;类似C语言中的全局变量和全局函数;
      • 可以简单的理解为即使定义了多个类,但里面每个类中执行友元函数都是执行的同一个全局接口函数;
      • 在类外未定义该类时也能直接调用类里的函数,而该函数不能操作Class里面的局部变量;
    • 命名空间 namespace和两个冒号::的操作符:using namespace std; std::cout 一组类组成的模块集合,并且里面有些函数是无需定义和初始化就能直接使用的;同时命名空间也可以用来避免命名冲突;
    • 域的概念:可以把一个.cpp文件就当成一个域,类似于把一个.c文件当成一个模块;
    • 基类派生类引用转换(父类和子类):static_cast;类似于C语言中各种结构体入口地址的计算和结构体变量类型强制转换;
    • 数据类型转换:例如static_cast<float> a;其中a变量是double类型;static_cast<float> a就类似于C语言中的(float)a;
    • 引用&:可以简单的将其当成C语言中的指针*,但是它们还有些不一样,需要在实际使用中慢慢体会;
      • func(Demo &d); d.a; 使用引用的元素时,它的元素调用不用->,而使用. 和C语言中有点不一样;
      • 引用在定义时必须同步初始化,类似于C语言中不允许出现野指针,指针必须要赋分配以后的初值;
      • 引用初始化后不能再更改对象,而指针可以指向这个指向那个,也可以自增自减等;
    • 操作符重载 operator+ =等:例如实现两个类的加减乘除运算等;
    • this->:在类的实现函数中要调用自己类的其它变量时,使用this->;
    • 派生:使用:冒号派生成子类,类似于C语言中结构体内嵌套结构体,被嵌套在内部的是父类,外面更大的结构体是子类;
      • 与C语言不同的是,子类不光继承了父类,还可以改写和重载父类中的函数(C++中称为方法);
    • 继承:父类的初始化方法或函数在子类中能直接用,这叫继承;
      • 多继承,一个子类可以包含多个父类;
    • 三大类型(封装、继承、多态):把一个Class当成一个全私有的结构体,要读写变量只能通过调用函数来实现,这就是封装;
      • 父类(基类)中的函数可以被子类(派生类)重写或重载,这个就叫多态;
    • 虚类型 virtual:因为子类中经常会重载父类中的函数,所以干脆父类中把可能会重载的函数加上virtual 来指明,有时甚至自己干脆都不实现了;
    • 类的定义 new:可以直接Class AA{}; AA a; 也可以AA *p_a = new AA; 需要有个概念是new一个类时里面的构造函数会自动运行,这和C语言很不一样;
    • 名词概念:类中的内容称为类的成员,变量称为类的属性或成员变量,类中的函数称为类的方法或者成员函数;因此,忘掉C语言中的全局变量、私有变量、函数的概念,开始使用属性和方法;
    • protected:和private私有类似;
    • 类的实例化:用类创建对象,类似于C语言中的定义(与定义相对应的就是声明);
    • 类空间的释放 delete:
    • auto变量:自动识别数据的类型;
    • 增加nullptr空指针关键字;
    • 异常处理:try、catch、throw
    • 泛型编程,模板template:
      • template ,有模板函数和模板类;类似于C语言中用宏定义拼接生成多个类似的结构体;
      • 模板需要被实例化;
    • 标准模板库(STL):容器vector、list等,迭代器iterator等
    • Lambda 表达式:auto func = [](int x) { return x * x; };
    • explicit关键字:用于修饰单参数构造函数或转换构造函数,禁止编译器进行隐式类型转换,避免意外的行为

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS5 分布式测试:断网情况支付场景异常恢复验证

以下是针对HarmonyOS 5分布式事务在断网支付场景下的异常恢复验证全流程方案&#xff0c;综合关键技术与测试策略&#xff1a; 一、核心事务机制验证 ‌两阶段提交&#xff08;2PC&#xff09;协议‌ 模拟支付流程中网络中断&#xff0c;验证事务协调者能否正确处理预提交与回滚…

【狂飙AGI】第5课:前沿技术-文生图(系列1)

目录 &#xff08;一&#xff09;绘画本质&#xff08;二&#xff09;国内外AI转绘展&#xff08;三&#xff09;创作思路&#xff08;四&#xff09;美学理论&#xff08;1&#xff09;不可能美学&#xff08;2&#xff09;趋无限美学&#xff08;3&#xff09;反物理美学&…

发那科A06B-6290-H124 伺服驱动器

‌FANUC A06B-6290-H124 伺服驱动器核心性能解析‌ ‌一、核心控制能力‌ ‌多模式精密控制‌ 位置控制‌&#xff1a;支持高精度旋转角度/直线位移调节&#xff08;分辨率达脉冲级&#xff09;&#xff0c;适用于数控机床定位&#xff08;误差0.01mm级&#xff09;和机器人轨…

Spring Boot 项目启动优化

Spring Boot 项目启动优化是一个非常重要的话题&#xff0c;尤其是在微服务和云原生环境下&#xff0c;快速启动意味着更快的部署、更高效的弹性伸缩和更好的开发体验。 下面我将从分析诊断、优化策略和终极方案三个层面&#xff0c;为你提供一个全面、可操作的优化指南。 一、…

「爬取豆瓣Top250电影的中文名称」数据采集、网络爬虫

- 第 108 篇 - Date: 2025 - 06 - 16 Author: 郑龙浩&#xff08;仟墨&#xff09; 文章目录 **任务&#xff1a;爬取豆瓣Tap250电影的中文名称****代码****实现效果** 任务&#xff1a;爬取豆瓣Tap250电影的中文名称 代码 # 豆瓣前Tap 250 import requests from bs4 import…

MySQL 多表查询、事务

1.多表查询的分类 1.1 内连接 在 MySQL 中&#xff0c;内连接&#xff08;INNER JOIN&#xff09;返回的是两个表中满足连接条件的记录的交集。这个“交集”不是指整个表&#xff0c;而是指符合连接条件的行组合&#xff0c;也就是A表和B表中满足我们使用on指定条件的记录。图…

CSP-J 2020 入门级 第一轮(初赛) 答案及解析

CSP-J 2020 入门级 第一轮&#xff08;初赛&#xff09; 答案及解析 在内存储器中每个存储单元都被赋予一个唯一的序号&#xff0c;称为&#xff08;&#xff09;。 A. 地址 B. 序号 C. 下标 D. 编号 答: A 计算机中每个存储单元都是1字节&#xff0c;都有唯一的地址。 编译器…

Flutter包管理与插件开发完全指南

Flutter作为Google推出的跨平台移动应用开发框架&#xff0c;其强大的生态系统离不开完善的包管理机制和丰富的插件支持。本文将全面介绍Flutter中的包管理体系和插件开发实践&#xff0c;帮助开发者高效管理项目依赖并扩展应用功能。 一、Flutter包管理基础 1.1 包管理概述 …

【视频直播出海】阿里云ApsaraVideo Live:从零搭建全球直播平台的“星际航行”指南!

【视频直播出海】阿里云ApsaraVideo Live&#xff1a;从零搭建全球直播平台的“星际航行”指南&#xff01; 在全球化浪潮的推动下&#xff0c;视频直播行业正以前所未有的速度跨越国界&#xff0c;成为连接世界的“数字新桥梁”。对于渴望拓展海外市场的企业而言&#xff0c;…

OAuth2中的Token

两个不同的Token OAuth2 中主要有两个不同的Token, 其中的区别为是否与用户相关联, 即与用户相关的用户Token, 和与客户端相关的客户端Token, 可以通过用户Token, 查询到用户的相关信息, 客户端Token与用户无关, 一般只用于客户端认证 用户Token 获取用户Token一般有两个方式…

使用 FastMCP 实现 Word 文档与 JSON 数据互转的 Python 服务

一、项目背景 本文分享一个基于 FastMCP 框架实现的文档处理服务&#xff0c;可实现 Word 文档&#xff08;.docx&#xff09;与 JSON 数据格式的双向转换。通过此服务&#xff0c;开发者可以轻松实现文档内容提取、结构化数据填充、样式模板复用等功能&#xff0c;适用于自动…

Vue3轮播图组件,当前轮播区域有当前图和左右两边图,两边图各显示一半,支持点击跳转和手动滑动切换

功能&#xff1a; 自动循环播放&#xff08;到达末尾后回到第一张&#xff09;、可设置切换间隔时间&#xff08;interval属性&#xff09; 左右导航按钮&#xff08;可自定义显示/隐藏&#xff09; 点击底部指示器跳转到指定幻灯片、且位置可调&#xff08;轮播图内部/外部&…

350+交付案例,高质量低成本构建智慧园区数字孪生交付新范式

在智慧园区建设领域&#xff0c;数字孪生技术正成为推动园区智能化转型的核心引擎。山东融谷信息凭借其全要素、全周期、全方位的数字孪生交付能力&#xff0c;已成功交付350余个项目&#xff0c;覆盖产业园区、智慧楼宇、智慧社区等多元场景&#xff0c;低成本高质量交付&…

OpenCV 图像像素类型转换与归一化

一、知识点 1、OpenCV支持多种数据类型&#xff0c;每种类型都对应着不同的取值范围。 (1)、CV_8U取值范围[0, 255]。 (2)、CV_16U取值范围[0, 65535]。 (3)、CV_32F取值范围[0, 1]。 2、OpenCV提供convertTo()函数来转换数据类型&#xff0c;提供normalize()函数来改…

机器学习算法_支持向量机

一、支持向量机 支持向量机只能做二分类任务 SVM全称支持向量机&#xff0c;即寻找到一个超平面使样本分成两类&#xff0c;且间隔最大 硬间隔&#xff1a;如果样本线性可分&#xff0c;在所有样本分类都正确的情况下&#xff0c;寻找最大间隔&#xff1b;如果出现异常值或样…

Linux : echo ~ tail 重定向符

&#x1f680; Linux 常用命令详解&#xff1a;echo、tail 与重定向符号全解析&#xff08;含通俗案例&#xff09; &#x1f4c5; 更新时间&#xff1a;2025年6月17日 &#x1f3f7;️ 标签&#xff1a;Linux基础 | Shell命令 | echo | tail | 输出重定向 | Linux入门 文章目录…

uniapp的更新流程【安卓、IOS、热更新】

UniApp应用更新方案 两种更新方式 APP全量升级&#xff1a;需要重新下载安装包热更新&#xff1a;通过下载wgt资源包实现&#xff0c;用户只需重启应用 Android更新实现 用户需要授权安装权限&#xff0c;流程为下载APK后自动弹出安装界面 var dtask plus.downloader.cre…

火山引擎解码生态型增长铁律

“技术流量与力量的崛起&#xff0c;本质上是一场生态规模的竞赛。每次浪潮的排头兵&#xff0c;都是指尖沾着代码的开发者——互联网时代的Linux社区让开源席卷全球&#xff0c;移动互联网的App Store催生百万开发者&#xff0c;而今天&#xff0c;大模型正在用API重构产业。”…

警惕GO的重复初始化

go的初始化方式有很多种&#xff0c;在某些情况下容易引起重复初始化导致错误。 事例如下&#xff1a; 当使用gorm连接数据库时定义了全局DB var DB *gorm.DB 但是在后面某个函数内部初始化时导致DB重新初始化变成了局部变量&#xff0c;导致原来的全局变量DB还是nil func I…

python校园服务交流系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…