从零开始学 C++|系列开篇:从 C 到 C++ 的衔接之路
前言之前在更新C语言的博客学校C课程这学期已经开始了当然我在3月3号已经提前练习了基础代码Luminous/Luminousbegin下面我也要开始更新C的博客了请大家多多支持。这既是给自己的学习留个脚印也希望能帮到和我一样刚学完 C 语言、正在跟着学校课程入坑 C 的同学。一、为什么我跟着学校课学还要自己写练习这学期学校正式开了 C 程序设计课但我发现学校课上的例子比较简单光听不写很容易忘必须自己动手敲一遍才能真正理解最重要的是我发现C 的核心其实就是 C 语言的升级版之前写 C 语言通讯录、顺序表、链表打下的基础完全可以无缝衔接过来比如大家常说的 C 类class在我看来本质就是 C 语言结构体struct的 超级加强版——C 的结构体只能存数据而 C 的类既能存数据又能把操作数据的函数也包进去这不就是我们写数据结构时一直想做的事吗先把 C 语言的数据结构练熟了再回头学 C 的面向对象反而更容易理解它为什么要这么设计。二、先搞懂C 到底是什么2.1 C 的诞生与发展C 是由本贾尼・斯特劳斯特卢普Bjarne Stroustrup在 1979 年于贝尔实验室设计的最初叫 带类的 C1983 年正式命名为 C。它的设计初衷就是在 C 语言的基础上增加面向对象编程的特性解决 C 语言在大型复杂软件开发中表达能力、可维护性不足的问题。2.2 C 的主要版本C 的标准一直在更新每个版本都带来了新的特性我们现在学习主要用 C11 及以上的版本版本发布时间核心特性C981998 年第一个官方标准引入 STL 标准模板库C112011 年革命性更新lambda、右值引用、智能指针、线程库C142014 年对 C11 的完善和扩展C172017 年结构化绑定、文件系统库C202020 年协程、概念、模块化这里插个有趣的瓜C23 本来计划加入网络库结果因为标准委员会内部关于 senders/receivers 的争论最终推迟到了 C26网上吐槽说 等 C 网络库出来我都退休了。2.3 C 和 C 的关系完全兼容绝大多数 C 代码可以直接在 C 编译器下运行向下兼容C 的所有语法在 C 中都能用扩展增强在 C 的基础上增加了面向对象、泛型编程、异常处理等特性适用场景C 更适合底层、性能要求极高的场景C 更适合大型复杂项目的开发三、我的第一批 C 练习3.1 Cpp start第一个 C 程序#includeiostream using namespace std; int main() { cout Hello world! endl; return 0; }知识点详解#includeiostream引入 C 标准输入输出流头文件对应 C 语言的stdio.husing namespace std;展开标准命名空间这样就不用写std::cout了cout标准输出对象对应 C 语言的printf流插入运算符自动识别变量类型不用手动指定格式符endl输出换行并刷新缓冲区对应 C 语言的\nC 程序的后缀是.cpp用 g 编译器编译而不是 gcc3.2 namespace_test命名空间namespace Luminous//单命名空间 { void sayHello() { coutHello Luminous!endl; } } namespace working//命名空间的嵌套 { namespace Luminous { void sayHello() { coutHello working Luminous!endl; } } int a 10; } int main() { Luminous::sayHello();//调用单命名空间中的函数 working::Luminous::sayHello();//调用嵌套命名空间中的函数 cout a的值为 working::a endl; return 0; }知识点详解为什么需要命名空间解决 C 语言中全局变量、函数的命名冲突问题比如 C 语言标准库有个rand()函数如果你自己也定义一个rand变量就会编译报错命名空间相当于给变量、函数套了个 盒子不同盒子里的同名变量不会冲突命名空间的三种使用方式方式 1命名空间名::成员名推荐最安全方式 2using 命名空间名::成员名展开单个成员方式 3using namespace 命名空间名展开整个命名空间小练习方便大项目不推荐命名空间的特性可以嵌套定义多个文件中定义的同名命名空间会自动合并C 标准库的所有内容都放在std命名空间中3.3 C 输入输出#includeiostream using namespace std; int main() { int a; double b; char c; cin a b c; // 连续输入多个变量自动识别类型 cout a a endl; cout b b endl; cout c c endl; return 0; }知识点详解cin标准输入对象对应 C 语言的scanf流提取运算符同样自动识别变量类型对比 C 语言的优势不用记%d、%lf、%c等格式符不容易写错可以连续输入输出多个变量代码更简洁支持自定义类型的输入输出后面学类的时候会用到3.4 缺省函数int add1(int a, int b 10)//半缺省参数b的默认值为10 { return a b; } int add2(int a 50, int b 20)//全缺省参数a和b都有默认值 { return a b; } int main() { coutsum1add1(10) endl; // 只传ab用默认值10输出20 cout sum2 add1(10, 20) endl; // 传两个参数用传入的值输出30 cout sum3 add2() endl; // 都不传用默认值502070 cout sum4 add2(5,10) endl; // 传两个参数输出15 return 0; }知识点详解什么是缺省参数声明或定义函数时给参数指定一个默认值调用函数时如果没有传这个参数就用默认值如果传了就用传入的值缺省参数的规则半缺省参数必须从右往左依次连续缺省不能间隔跳跃函数调用时实参必须从左往右依次传递不能跳跃函数声明和定义分离时缺省参数只能写在声明中不能同时写在声明和定义里作用简化函数调用不用为了不同的参数个数写多个重载函数提高代码的灵活性3.5 函数重载 test函数重载int Add(int a, int b)//函数重载1int类型 { return a b; } double Add(double a, double b)//函数重载2double类型 { return a b; } int main() { int a 10, b 20; int sum1 Add(a, b); cout sum1 sum1 endl; // 输出30 double c 15.5, d 25.6; double sum2 Add(c, d); cout sum2 sum2 endl; // 输出41.1 return 0; }知识点详解什么是函数重载C 允许在同一作用域中定义多个同名函数要求这些函数的形参列表不同参数个数不同、参数类型不同、参数类型顺序不同编译器会根据实参的类型和个数自动匹配对应的函数注意返回值不同不能作为函数重载的条件因为调用时无法区分缺省参数可能导致函数重载产生歧义比如两个函数都能匹配同一个调用C 语言为什么不支持函数重载C 语言编译后函数名就是原来的名字比如Add编译后还是_AddC 编译后函数名会包含参数类型信息比如int Add(int,int)编译后变成_Add_int_int这样不同参数的同名函数编译后的名字就不一样了不会冲突3.6 引用 test引用// 传值不能交换因为传的是副本 void change1(int c, int d) { int a c; c d; d a; } // 引用传参可以交换传的是变量本身 void change2(int c, int d) { int a c; c d; d a; } // 指针传参可以交换传的是变量的地址 void change3(int* c, int* d) { int a *c; *c *d; *d a; } int main() { int a 10, b 20; change1(a, b); cout change1后a a , b b endl; // 不变 int c 10, d 20; change2(c, d); cout change2后c c , d d endl; // 交换成功 int e 10, f 20; change3(e,f); cout change3后e e , f f endl; // 交换成功 return 0; }知识点详解什么是引用引用不是新定义一个变量而是给已存在的变量取一个别名编译器不会为引用变量开辟内存空间它和引用的变量共用同一块内存空间语法类型 引用名 引用对象;引用的特性引用在定义时必须初始化一个变量可以有多个引用引用一旦引用一个实体就不能再引用其他实体这是和指针最大的区别引用的使用场景引用传参代替指针传参代码更简洁不容易出错引用做返回值减少拷贝提高效率后面学类的时候会详细讲引用和指针的区别引用是别名不开空间指针是存储地址的变量开空间引用必须初始化指针可以不初始化但不推荐引用不能改变指向指针可以改变指向引用没有空引用指针有空指针四、学习方法和资源推荐4.1 我的学习方法上课认真听跟着学校老师的节奏走先把基础概念搞懂课后必写代码每个知识点都自己写一遍测试用例运行出错了再去查资料写博客总结每学完一个章节就写一篇博客既能巩固知识也能方便以后复习结合数据结构用 C 重写之前学过的 C 语言数据结构既能练 C又能加深对数据结构的理解4.2 资源推荐参考文档C 参考手册 - cppreference.com官方中文文档信息最全Reference - C Reference适合新手内容易懂书籍《C Primer》经典语法书适合作为字典随时查阅《STL 源码剖析》中后期看深入理解 STL 的实现原理网上流传的 21 天精通 C 只是个梗C 是一门需要长期学习的语言不用追求速成一步一个脚印就好。最后从 C 到 C不是从零开始而是站在之前的基础上更上一层楼。如果你也刚学完 C 语言正在学 C不用害怕它的语法复杂很多东西我们其实已经在 C 语言里接触过了只是换了一种更优雅的写法。接下来的日子一起加油吧

相关新闻

基于Simulink的智能底盘域控(CDC+EPS+IBC)集成

基于Simulink的智能底盘域控(CDC+EPS+IBC)集成

目录 一、总体模型结构(建议文件名 ChassisDomain_Intact.slx) 二、MATLAB 初始化脚本(init_ChassisDomain.m) 三、各 Subsystem 详细建模说明 ❶ Vehicle_Bicycle(简化自行车) ❷ CDC_Subsystem&…

2026/7/14 18:40:54阅读更多 →
AI学习焦虑转化实战指南:从Python到项目落地的完整路径

AI学习焦虑转化实战指南:从Python到项目落地的完整路径

最近在技术社区里,经常看到这样的讨论:"AI发展这么快,我到底要不要学?学了会不会很快被淘汰?" 这种焦虑感,相信很多开发者都深有体会。但你可能没意识到,这种焦虑恰恰是推动你学习AI的…

2026/7/14 18:40:54阅读更多 →
【Python入门】了解掌握Python中函数的基本使用

【Python入门】了解掌握Python中函数的基本使用

1. 函数的定义 函数:函数是组织好的、可重复使用的、用来实现特定功能的代码片段。 语法: # 定义函数 def 函数名(参数列表):函数体......return 返回值# 调用函数 函数名(参数)注意: 函数定义时的参数列表与返回值语句是可有可无的&#xff…

2026/7/14 18:40:54阅读更多 →
DXR光线追踪入门:从核心概念到实战,掌握DirectX Ray Tracing开发

DXR光线追踪入门:从核心概念到实战,掌握DirectX Ray Tracing开发

1. 项目概述:从光栅化到光线追踪的跨越 如果你和我一样,是从D3D11甚至更早的固定管线时代一路摸爬滚打过来的图形程序员,那么第一次接触D3D12的DirectX Ray Tracing(DXR)时,那种既兴奋又头疼的感觉一定不陌…

2026/7/14 22:01:11阅读更多 →
Pandas多维聚合实战:金融风控中的高效分析模式

Pandas多维聚合实战:金融风控中的高效分析模式

1. 项目概述:为什么“多维聚合”不是Pandas进阶技巧,而是业务分析的生存技能我在银行风控部门干了七年,从刚毕业写SQL查数的分析师,到带三个人小团队做反欺诈模型的数据架构师。这七年里,我亲手重构过四套核心报表系统…

2026/7/14 22:01:11阅读更多 →
纯C手写SVD分解实现,单文件无依赖,带详细注释适合边学边调

纯C手写SVD分解实现,单文件无依赖,带详细注释适合边学边调

本文还有配套的精品资源,点击获取 简介:这个资源包只包含一个svd.c文件,用标准C语言从零实现矩阵奇异值分解(SVD),不调用任何外部数学库或BLAS/LAPACK。所有计算基于double类型浮点数,支持任…

2026/7/14 22:01:11阅读更多 →
STM32F103实测可用的AT25160A SPI EEPROM驱动工程包(含初始化、读写、擦除完整代码)

STM32F103实测可用的AT25160A SPI EEPROM驱动工程包(含初始化、读写、擦除完整代码)

本文还有配套的精品资源,点击获取 简介:一套开箱即用的STM32F103驱动AT25160A串行EEPROM工程,已在Keil MDK5环境下实测通过。包含SPI外设底层驱动(spi.c/h),支持模式0和模式3;AT25160A专用操…

2026/7/14 22:01:10阅读更多 →
R语言绘制专业级人口金字塔图:原理、避坑与实战

R语言绘制专业级人口金字塔图:原理、避坑与实战

1. 项目概述:为什么人口金字塔不是“画个三角形”那么简单?人口金字塔——这三个字在数据可视化圈里,几乎和“柱状图”“折线图”一样基础。但你真以为它只是把男女人数左右一摆、年龄上下一排,再调个颜色就完事了?我用…

2026/7/14 22:01:10阅读更多 →
MATLAB医学图像分割工具包:支持ENO/WENO格式的水平集法边界提取实现

MATLAB医学图像分割工具包:支持ENO/WENO格式的水平集法边界提取实现

本文还有配套的精品资源,点击获取 简介:专为视网膜等医学图像设计的MATLAB水平集分割工具包,提供完整的边界提取与区域分割功能。内置多种高精度数值格式:ENO1、ENO2、ENO3及WENO,覆盖法向量演化、曲率计算、自适应…

2026/7/14 21:56:10阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/14 4:56:14阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/14 2:55:05阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/14 6:17:41阅读更多 →
【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

更多请点击: https://intelliparadigm.com 第一章:Cursor数据库安全红线概览 Cursor 作为一款基于 AI 的智能编程助手,其本地数据库(SQLite 存储)承载着用户代码片段、会话历史、自定义规则及敏感上下文信息。理解其安…

2026/7/14 0:03:18阅读更多 →
【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

更多请点击: https://codechina.net 第一章:Notion AI写作辅助的底层能力边界认知 Notion AI 并非通用大语言模型的直接封装,而是基于 Llama 系列与自研微调模型构建的轻量化推理服务,其输入上下文窗口严格限制在 8192 token&…

2026/7/14 0:03:18阅读更多 →
AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

更多请点击: https://kaifayun.com 第一章:AI Agent数据越界行为的合规性挑战与溯源必要性 AI Agent在自主执行任务过程中,可能因提示注入、上下文污染或权限配置缺陷,无意或有意访问、缓存、传输受保护数据(如PII、G…

2026/7/14 0:03:18阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/14 15:07:30阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/14 4:45:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/14 2:42:17阅读更多 →