【C++】 基础语法篇

用户消费行为分析(MapReduce实现,Hive分析) 一、题目要求 数据来自CDNow网站的一份用户购买CD明细,本数据集共有 6 万条 左右数据,数据为 CDNow 网站 1997年1月至1998年6月的用户行为 数据 阅读详情

【C++】 基础语法篇

文章目录

学习C++重要性
查看编程语言月排行榜
在这里插入图片描述
在这里插入图片描述
大家可以看到C++虽然近几年使用排名有所下降但是还是始终名列前五热门开发语言使用榜
在C++学习中间其实是分为1.平步上升 2.陡步上升 两种方式
1.平步上升 知识内容量是没有增加的但是,重在运用,难度小些,但对知识掌握运用程度水平要求较高
2.陡步上升 知识全是新的,并且有一些绕,里面涵盖很多新的思想,eg:类与对象
list中的iterator设计
所以大家要做好准备,让我们开启新的C++学习之之旅吧

1. C++学习书籍推荐

在这里插入图片描述
这三本书看还是需要C++基础的建议C++学过大半在进行阅读

2. 头文件

在C++语法中是完全兼容C语言的,所以C语言中间的头文件是可以在C++中使用的但是C++中新的头文件如<iostream>基本上是不加入.h
1. 区分 C++ 新标准与 C 语言旧标准
带 .h 的是 C 语言时代的产物: 比如 <stdio.h>、<stdlib.h>。
不带 .h 的是 C++ 标准化后的产物
2. 为了引入“命名空间(namespace)
在老的 <iostream.h> 中,所有的函数和变量都是直接暴露在全局作用域里的。如果你的代码里不小心定义了一个和库函数同名的变量,程序就会直接崩溃(命名冲突)。
换了新头文件后,里面的变量和函数被强制塞进了一个叫 std 的“隐形盒子”里。
新的 采用了命名空间(namespace std)机制。里面所有的标准库内容都被包裹在 std 这个“盒子”里
namespace会再后面讲解

3. 命名空间

实际工作中,一个大项目是由很多工程师一起完成的,那么在定义变量时我不知道你的命名方式,函数实现,万一我定义函数与变量时与你冲突了咋半?
为了适应实际工作中需要,C++中引入了命名空间来解决,我们来看看是咋实现的
原理就是用namespace把你们每个人写的函数变量封装起来,要访问时,命名空间名字+::(域作用限定符来访问)
命名空间的展开
using namespace +你想展开的作用域名称
eg: using namespace std在学习编程中为了方便,我们经常展开std(C++标准库)这样每次使用时不用再指定作用域,但是在实际工程中间开始不建议直接展开,还是指定作用域调用比较安全

#include<stdio.h>
namespace jimi
{
int a = 0;
int b = 1;
}
 int main()
{
// 编译报错:error C2065: “a”: 未声明的标识符
printf("%d/n", a);
return 0;
}
// 指定命名空间访问
int main()
{
//::域作用限定符当命名域未展开用来访问命名与中间的成员
printf("%d/n", N::a);
return 0;
}

4. C++的输入输出

在C语言中我们常用的输入输出时printf,scanf那在C++中是怎么样的呢
endl相当于以前的’/n’
在C++中输出我们用输出流cout(标准输出流) <<这个双箭头符号时流提取符号
<<中间只能够放一个合法表达式如:一个字符串,一个int类型的数,一个char类型
错误示范cout << 'a'x' << endl;
正确写法cout<<'a'<<'x'<<endl;
流插入与printf最大的区别就是在输出变量不用再指明符号了,他会自动推导类型,很方便,但是也不能完全取代比如指定打印指针情形
优势是在其中可以自动识别类型不再需要"%d" “%s”
劣势: 在控制小数点位数较麻烦

double c = 2.22222222;
cout << c << endl;//默认取后五位
printf("%.2lf/n", c);

输入我们使用cin(标准输入流) >>这个双箭头符号是流插入符号
使用方式与scanf几乎完全一致,cin>>a>>b;但是与输出流一样不用指明类型自动推导
以上使用要包含头文件#include<iostream> 并且cin cout都在std(标准库)命名空间中
当然输出流输入流用起来固然方便,但是代价是损失了一些效率在高需求IO环境下要加三句代码来,因为流提取,流插入效率还是比较低

ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);//且在后面换行用'/n'

5. 缺省参数

  1. 全缺省
    就是给每个变量一个初始值,当你调用此函数没有传入参数或只传入一个值他就会使用缺省值,缺省值就是你函数中定义的变量后面赋的值
viod func(int a =1,int b=2)
{
     return a+b
}

func();就是完全用缺省值,1+2
func(2);2是给了a因为传值是从左到右2+2
func(2,3);你传入参数优先级更高,缺省值就失效了2+3

  1. 半缺省
    与全缺省不同的就是你也给缺省值但不是函数中每个变量都有缺省值,当然由于传参是从左到右传,那给缺省值就得从右到左中间不允许有间隔跳过不给缺省值的不然你先给了左边缺省值,传参也献给左边,那你调用不给全参数,右边就没有接受到参数
viod func(int a ,int b=2)
{
     return a+b
}

使用与全缺省一致

6. 函数重载

在C语言中我们想实现多种加法就要定义并调用多个不同名字加法函数,但这些加法实现起来有十分类似,非常不方便,在C++中我们允许定义同名函数,这种方式叫做函数重载
如下我们定义了多个同名函数,虽然调用时我们都是Add但是实际上我们却是写了很多个不同的函数

void Add(int a, int b)
{
	cout << "a+b" << endl;
}
void Add(double a, double b)
{
	cout << "double a+b" << endl;
}
void Add(int a)
{
	cout << "a+3" << endl;
}
void Add()
{
	cout << "a" << endl;
}

注意:
在定义重载函数时返回值也可以不同但是,编译器区分函数重载不能仅仅由返回值,你要么参数类型不同要么参数个数不同,才构成重载
在这里插入图片描述

7. 引用

引用,类似指针,但和指针又有不同之处,他不额外开辟空间,只是给变量,函数等换个别名 符号用&
引用sizeof大小为引用类型的大小,指针sizeof的大小为X86:4或X64:8

  1. 引用的定义

int a = 10;
int& b;这是错误写法引用必须要初始化
一个变量可以有多个引用但一个引用不能对应多个变量
int& b=a; int& b=c;(错误示范)
这就引申出了为什么指针不能被引用代替 eg:在链表中删除元素,指针可以修改指向,引用不能修改

  1. 有关应用权限的问题

权限可以缩小但不可以放大
double a = 10.22;
int i = a;
int& b = a;
此时就是不合理的当发生类型转换或者运算时我们会生成一个临时对象这个对象是只读的,不可以改变
只能这样写const int& b = a;
int c = 10;
错误写法示范int& d = c + i;
const int& d = c + i;
但对于可读可写的变量我们可以设计一个别名让他的权限变小,就相当于在家里的自己与外面的自己
int a1 = 10;
const int& b1 = a1;

  1. 函数返回值引用

函数返回值使用引用

STDataType& STTop1(Stack& rst)
{
	//assert(pst && pst->top > 0);
	return rst.a[rst.top - 1];//这里返回值是会产生一个临时值返回的是临时值的复制,这个临时值用完就销毁掉了
	                          //返回回去本不应该被修改,但这里返回的值引用,我们说过引用就是取个别名变成可修改的了
}
STDataType STTop2(Stack& rst)
{
	//assert(pst && pst->top > 0);
	return rst.a[rst.top - 1];//这里返回值是会产生一个临时值返回的是临时值的复制,这个临时值用完就销毁掉了
}
int mian()
{
Stack st;
STTop1(st)=5;//可直接修改
}

在这里有两个版本的交换,在以前写交换,形参不可改变实参,但是我们把参数写成引用就不用使用指针来交换了,因为引用就相当于变量本身改变引用的对象,就可直接改变变量值

//C
Swap(int* pa,int* b)
{
int c=*pa;
*pa=*pb;
*pb=c;
}
//C++
Swap(int & a,int &b)
{
int c=a;
a=b;
b=c;
}
int a1 = 1;
int b1 = 2;
cout << "a1 = " << a1 << " " << "b1 = " << b1 << endl;
Swap(a1, b1);//这里不再用&a1 &b1

8. 内联函数(inline)

内联函数与宏函数一样都是在调用位置展开对于调用多且频繁的小函数使用好点,效率会高点,因为不用像普通函数一样建立栈帧

  1. 宏函数
    #define Add(x,y) ((x)+(y))//宏函数在这里是直接展开//不开辟空间外层括号内层括号都不能省
  2. 内联函数
    inline int Add(int x, int y)
    {
    return x + y;
    }
  3. 普通函数
    int Add(int a, int b)//在这里会出现无法区分两个函数的调用
    {
    cout << “a” << endl;
    }
    普通函数要调用栈帧效率稍低
    内联函数----------vs---------宏函数 关键字inline
    用来替代宏函数的,优势不容易写错,可以但函数来写,不会像宏函数一样容易写错
    int ret = Add(1, 2);
    cout << ret << endl;

9. nullptr

空指针NULL和nullptr区别与创造的意义
NULL---------------(void/*)0或者0
编译器在以下情况不知道分不清要传空指针还是0
eg:

void func(int x)
{
	cout << "func(int x)" << endl;
}
void func(int* ptr)
{
	cout << "func(int* x)" << endl;
}
func(0);
func(NULL);
func(nullptr);

在这里插入图片描述/*可以看到传入NULL调用的是void func(int x)传入nullptr调用的才是void func(int ptr)/*/*这也印证了我前面所说的
所以创造了关键字nullptr,他可以是任何类型但就是不能是整型变量
在C++中以下是不合法的C++不允许隐式类型转换不同类型之间,必须要手动强制转换

double* p1 = NULL;
void* p3 = NULL;
int* p2 = p1;
int* p2 = p3;

希望读者们多多三连支持

小编会继续更新

你们的鼓励就是我前进的动力!

学习资源

如果你是也准备转行学习网络安全(黑客)或者正在学习,这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你

**读者福利 |** 优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 **(安全链接,放心点击)**![](https://i-blog.csdnimg.cn/img_convert/a6502ab41b1a86132b9ebb5aab9a2cdc.jpeg)

知识库由360智榜样学习中心独家打造出品,旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力,熟练掌握基础攻防到深度对抗。

1、知识库价值

深度: 本知识库超越常规工具手册,深入剖析攻击技术的底层原理与高级防御策略,并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等,提供了独到的技术视角和实战验证过的对抗方案。

广度: 面向企业安全建设的核心场景(渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营),本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点,是应对复杂攻防挑战的实用指南。

实战性: 知识库内容源于真实攻防对抗和大型演练实践,通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。

2、 部分核心内容展示

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

在这里插入图片描述

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

内容组织紧密结合攻防场景,辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合,是你学习过程中好帮手。

1、网络安全意识

img

2、Linux操作系统

img

3、WEB架构基础与HTTP协议

img

4、Web渗透测试

img

5、渗透测试案例分享

img

6、渗透测试实战技巧

图片

7、攻防对战实战

图片

8、CTF之MISC实战讲解

图片

3、适合学习的人群

‌一、基础适配人群‌

  1. ‌零基础转型者‌:适合计算机零基础但愿意系统学习的人群,资料覆盖从网络协议、操作系统到渗透测试的完整知识链‌;
  2. ‌开发/运维人员‌:具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能,实现职业方向拓展‌或者转行就业;
  3. ‌应届毕业生‌:计算机相关专业学生可通过资料构建完整的网络安全知识体系,缩短企业用人适应期‌;

‌二、能力提升适配‌

1、‌技术爱好者‌:适合对攻防技术有强烈兴趣,希望掌握漏洞挖掘、渗透测试等实战技能的学习者‌;

2、安全从业者‌:帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力‌;

3、‌合规需求者‌:包含等保规范、安全策略制定等内容,适合需要应对合规审计的企业人员‌;

因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传优快云,朋友们如果需要可以在下方优快云官方认证二维码免费领取【保证100%免费】

编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能,实现职业方向拓展‌或者转行就业;
3. ‌应届毕业生‌:计算机相关专业学生可通过资料构建完整的网络安全知识体系,缩短企业用人适应期‌;

‌二、能力提升适配‌

1、‌技术爱好者‌:适合对攻防技术有强烈兴趣,希望掌握漏洞挖掘、渗透测试等实战技能的学习者‌;

2、安全从业者‌:帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力‌;

3、‌合规需求者‌:包含等保规范、安全策略制定等内容,适合需要应对合规审计的企业人员‌;

因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传优快云,朋友们如果需要可以在下方优快云官方认证二维码免费领取【保证100%免费】

img

反激电源占空比为何必须小于0.5?次谐波振荡与斜坡补偿详解 在开关电源设计中,峰值电流模式控制因其优异的动态响应和逐周期限流保护而被广泛应用。其工作原理是通过采样电感电流的峰值,与误差电压比较来控制开关管的导通与关断。然而,这种控制方式在反激等隔离拓扑中,当占空比超过50%时,会面临一个固有的稳定性挑战——次谐波振荡。这是由于电流扰动会在相邻开关周期内被放大而非衰减,导致系统在开关频率一半处发生振荡,严重影响输出纹波和可靠性。为解决这一问题,工程上引入了斜坡补偿技术,通过向控制信号叠加一个固定斜率的斜坡,改变环路增益条件,从而在宽输入电压或高占空比需求下维持系统稳定 阅读详情

相关推荐

EGO_Plannerv2代码学习(一):栅格建图之V1 V2的区别

最近在尝试将高飞老师的集群规划器部署到真实无人机上跑一下,开这个新帖记录下学习过程中的问题和想法。

qq_41069236的博客 5753

C++学习指南语法篇完整资源包:为零基础打造的高效学习工具

C++学习指南语法篇完整资源包:为零基础打造的高效学习工具 去发现同类优质开源项目:https://gitcode.com/ 在编程语言的庞大体系中,C++以其高效性和强大的功能,一直占据着不可或缺的地位。对于初学者来说,掌握C++的基础语法是迈出编程第一步的关键。今天,我们将为您推荐一个开源项目——C++学习指南(语法篇)完整资源包,帮助您系统学习C++编程。 项目介绍 C++学习指南(语法篇)...

gitblog_06746的博客 658

Arduino for ESP32-----ESP-NOW介绍及使用

ESP-NOWESP-NOW介绍ESP-NOW支持以下特性ESP-NOW技术也存在以下局限性获取ESP32的MAC地址ESP-NOW单向通信(One-way communication)ESP32单板间的双向通信一对多通信(一发多收)一对多通信(多发一收) ESP-NOW介绍 ESP-NOW是一种由Espressif开发的协议,可以让多个设备在不使用Wi-Fi的情况下相互通信。该协议类似于低功耗的2.4GHz无线连接。设备之间的配对需要在通信之前完成。配对完成后,连接是安全的、点对点的,不需要握手。这意味着

Better_man1的博客 2万+

C++基础入门--语法篇(上)

C++基础入门--语法篇(上)

2502_90565057的博客 976

海康VisionMaster与西门子Smart 200进行S7通信

海康VisionMaster与西门子Smart 200进行S7通信

haier123888的博客 8180

FLUENT Meshing Watertight Geometry工作流入门 - 9 生成体网格

总结一下我们学到的东西。讨论体积网格的重要性,并了解生成体积网格的不同方法。还了解体积网格质量的重要性,并学习如何改进它。

B_etter_Man的博客 1万+

C++ 学习(基础语法篇)

C++学习之基础语法

qq_44755885的博客 1万+

一篇把 Transport 做到可复制的实战指南:从 CTS 底层表到 LSMW、Variant、Layout、TABU、Query、SAPscript 全对象搬运

本文深入解析SAP系统中的Transport机制,将其视为可审计、可追溯的变更流水线。文章从CTS/Transport Organizer通用方法论和具体对象搬运手法两个层面展开,详细介绍了LSMW项目、程序Variant、屏幕/ALV Layout、表数据、ABAP Query、SAPscript和SO10标准文本等对象的传输策略。通过真实案例说明,代码对象往往能被正确传输,但"运行体验"和"业务配置"却常被遗漏,导致QAS测试正常而PRD环境异常。文章提供了一套可

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 174

【C++11】基础语法篇

这个容器没有提供很多的接口,它用于实现容器多参数类型的隐式转换。

m0_73634434的博客 1080

最新Python爬虫实战(入门爬虫篇)——案例7:电影网站电影数据采集(详细爬虫思路截图+抓包动图演示+完整爬虫代码+详细注释)

本次案例通过Python爬虫技术,成功实现了对某电影网站Top250多页电影详细信息的批量爬取与Excel保存。代码采用模块化设计,包含分页请求构造、XPath+正则提取结构化信息、Excel数据持久化保存等完整流程。通过配置User-Agent等请求头信息,有效模拟浏览器行为以绕过豆瓣基础反爬策略。整个爬虫逻辑遵循"分页遍历 → 请求页面 → 解析HTML → 提取电影信息 → 保存到Excel"的标准流程,与主流静态网站爬取范式高度一致。

努力让自己发光,对的人才能迎着光而来 11万+

深度强化学习 | 基于SAC算法的动态避障(ROS C++仿真)

本文介绍了基于SAC(软性演员-评论家)算法的机器人运动规划方法,通过PyTorch框架实现了端到端训练,并部署到Python和ROS C++中。实验结果显示,基于SAC算法的智能体在动态避障任务中表现良好,能实现从起点到终点的无碰撞导航。

FRIGIDWINTER的博客 8210

C++面试锦囊-基础语法篇

预处理:g++ -E hello.c -o hello.i。处理源码中的预处理指令(以#开头的命令),生成纯文本代码。编译:g++ -S hello.i -o hello.s。包含(词法分析、语法分析、语义分析、代码优化、生成汇编)汇编:gcc -c hello.s -o hello.o。链接:g++ hello.o -o hello。包含(宏替换、头文件包含、条件编译、删除注释)包含(符号解析、地址重定位、库文件链接)将汇编代码转换为机器码(目标文件)- 面向对象的语言(多范式、泛型)

Somnambulist_Leon的博客 979

单片机:实现MPU6050的卡尔曼滤波算法(附完整源码)

单片机:实现MPU6050的卡尔曼滤波算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 798

c++面试:基础语法篇

c++面试个人总结:基础语法篇

葛雨龙的博客 1157

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C++入门指南:基础语法篇

给已有数据类型起别名,简化复杂类型书写(如指针、结构体类型)。:解决命名冲突(如不同库中同名函数/变量),C++核心特性。:定义不可修改的常量(只读变量),编译期检查,避免误修改。:输入(读取控制台输入),支持多变量连续输入;:跳过本次循环剩余代码,直接进入下一次循环;的位置(可在任意处,无匹配时执行)。:输出(控制台打印),需包含头文件。,但推荐始终添加(避免逻辑错误)。存储在只读数据区(修改会崩溃)。(语法更清晰,支持模板别名),但。用于逻辑判断(与/或/非),支持。除数不能为0(运行时崩溃);

2509_93923260的博客 715

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++基础入门--语法篇(下)

C++基础入门--语法篇(下)

2502_90565057的博客 1264

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【C++快速入门】基础语法篇

C++快速入门课程推荐语法须知cin、cout函数重载(Overload)默认参数extern "C"#pragma once内联函数(inline function)内联函数与宏表达式const引用(Reference)结构体的引用指针的引用数组的引用函数返回值被赋值引用的本质常引用(Const Reference)常引用指向不同类型的数据 课程推荐 这里推荐一门课,30小时快速精通C++和外挂...

萌宅鹿的技术小屋 1011

《从Python到C++ - 基础语法篇1》

这篇文章是《从Python到C++ - 基础语法篇1》的教程,主要帮助Python学习者快速入门C++。文章对比了Python和C++在基础语法上的差异,包括代码结构(分号、大括号)、注释方式、主函数写法等基本概念。

Yz_tb的博客 479

C++的基础语法篇一 ——命名空间

本篇博客正式进入C++语言的学习,C++是兼容C语言的,也是弥补了C语言的一些不足,同时也是向更高难度语言方面的学习。

moxuezhendecai的博客 988

C++基础语法篇三 ——类和对象

本篇博客是关于类和对象的详细介绍,定义、语法。喜欢的点个免费的关注!

moxuezhendecai的博客 723

从C到C++【基础语法篇01】

这篇文章适合已经学过c语言的读者!!! 首先要说明的是C++兼容C的百分之99的语法在我们了解命名空间之前,我们先看两个c语言的例子 1. 这里可以跑过去,但是如果加入了头文件#include以后就跑不过去了,原因是因为stdlib.h中有rand这个库函数 2. 这里假设有2个头文件,一个是list.h,和queue.h 这是我们编译时会发现跑不过去,原因在于这两个头文件都有struct Node,想要解决这个问题,除了改名就别无他法(C语言无法解决),但是C++引入了命名空间 我们

qq_20963687的博客 158
上一篇: 数据结构:算法效率与复杂度分析详解
下一篇: Linux操作系统
披荆斩棘的GG
博客等级 码龄4年 1万+粉丝 2960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值