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

【我的C++入门之旅】(上)

在这里插入图片描述

前言

C++的发展史

1979年,贝尔实验室的Bjarne等人试图分析unix内核的时候,试图将内核模块化,但是发现C语言有很多的不足之处,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes,之后经过不断的完善更新,在C语言的基础上诞生了C++这样一门语言

C++的重要性

所有操作系统几乎都是C/C++写的,许多大型软件背后几乎都是C++写的,比如:Photoshop、
Office、JVM(Java虚拟机)等,究其原因还是性能高,可以直接操控硬件,称之为在硬件之上的语言
在这里插入图片描述

目录

  • 前言
    • C++的发展史
    • C++的重要性
  • 1.命名空间
    • 命名空间的定义
      • 命名空间的使用
  • 2.C++的 cout & cin
  • 3.缺省参数
    • 全缺省参数
    • 半缺省参数
    • 缺省参数用途
  • 4.函数重载
    • 编译链接过程
    • 函数名修饰规则

首先来个开胃菜:使用C++打印Hello World,打开我们的C++之旅

#include <iostream>
using namespace std;int main()
{cout << "Hello World!" << endl;return 0;
}

注:以下知识都是认识C语言的不足之处,取长补短,这样才能更好的了解C++

1.命名空间

C语言缺陷
命名冲突:
1.自己定义的和库里面的名字一样会发生冲突
2.我们自己起的名字和别人的一样,会发生冲突

这段代码如果不包含#include <stdlib.h>,可以正常运行

#include <stdio.h>
//#include <stdlib.h>int rand = 0;int main()
{printf("%d", rand);return 0;
}

但是如果包含了#include <stdlib.h>,就会报错,那到底是为什么呢?
原因很简单,因为我们定义的rand和头文件stdlib.h库里面的发生了冲突

在这里插入图片描述

那么为了更好的解决上边的问题,祖师爷在C的基础上增加了命名空间的概念:
namespace Willim(名字可以自取);
展开命名空间:using namespace William;
但是一般情况不要轻易展开命名空间
可以选择指定访问

命名空间的定义

下面是命名空间的定义和指定访问,指定访问,我们可以用: :
下面代码的意思是到命名空间William找到rand

//命名空间的定义
namespace William
{int rand = 1;
}int main()
{printf("%d", William::rand);//指定到命名空间访问一个叫rand的变量return 0;
}

但是如果展开了命名空间,就相当于暴露到全局,又和库里面的冲突了
在这里插入图片描述

当局部变量和全局变量还有命名空间里的变量名字相同的时候:
(如果有一个访问了,就不会进行访问后面的)
局部域 -> 全局域 -> 展开的命名空间域 or 指定访问命名空间域
如果命名空间没有展开,也不会去访问
如果展开了,如果有相同的名字也会发生冲突

int a = 0;
namespace William
{int a = 1;
}
//展开命名空间
//using namespace William;
int main()
{int a = 2;printf("%d\n", a);//局部域优先printf("%d", ::a);//跳过当前域return 0;
}

命名空间的使用

命名空间可以定义各种类型,如变量,函数,结构体等

namespace William
{int rand = 10;//变量int Add(int left, int right)//函数{return left + right;}struct Node//结构体{struct Node* next;int val;};
}

嵌套命名空间:
可以解决在同一个命名空间里有名字相同的变量

namespace N1
{int a;int b;int Add(int left, int right){return left + right;}namespace N2{int a;int b;int Sub(int left, int right){return left - right;}}
}int main()
{printf("%d \n", N1::Add(1, 2));printf("%d \n", N1::N2::Sub(3, 2));return 0;
}

2.C++的 cout & cin

cout标准输出 && <<流插入符
cin标准输入 && >> 流提取符
endl则是C++特有的换行符号
使用时必须包含含< iostream >头文件件以及按命名空间使用方法使用std

#include <iostream>
using namespace std;int main()
{cout << "Hello World!" << endl;return 0;
}

C++的输入输出可以自动识别变量类型,不用像printf/scanf那样,反倒更方便

#include <iostream>
using namespace std;
int main()
{int a;double b;char c;// 可以自动识别变量的类型cin >> a >> b >> c;cout << a << endl << b << endl << c << endl;return 0;
}

3.缺省参数

函数没有传参时,使用默认参数
传参时,使用指定参数

没有传参时
在这里插入图片描述
指定传参时
在这里插入图片描述

全缺省参数

#include <iostream>
using namespace std;
void Func(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}int main()
{Func();return 0;
}

半缺省参数

半缺省参数必须从右往左依次来给出,不能间隔着给
缺省值必须是常量或者全局变量
C语言不支持

#include <iostream>
using namespace std;
void Func(int a, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}int main()
{Func(1);return 0;
}

缺省参数用途

一般情况下,我们可以这样使用,默认malloc的大小是4,不传参时,使用默认的值,也可以传参指定malloc的大小
在这里插入图片描述
在这里插入图片描述

4.函数重载

同名函数,一个函数有多个意思,形参可以参数个数不同,类型不同,顺序不同
返回值没有要求

这段代码中函数重名,但依然可以运行,这就是函数重载的概念,函数会根据参数自动匹配
但如果是C语言就会编译失败

void Func(int x)
{printf("%d", x);
}void Func(double c)
{printf("%f", c);
}int main()
{Func(1.1);
}

编译链接过程

了解一个概念:
编译和链接过程:
1.编译
#预处理://头文件展开//#denfine和宏定义的符号替换和删除//条件编译//去掉注释
#编译://检查语法//生成汇编代码
#汇编://把汇编代码翻译成二进制指令//形成符号表
2.链接
1.合并段表
2.符号表的合并和重定位
生成可执行程序

函数名修饰规则

在编译过程中声明就像(承诺),链接就像(兑现承诺)
在编译过程中会生成反汇编指令,那么通过函数名修饰规则:C语言在汇编代码里,直接用的函数名,而C++会把函数名的长度,类型的首字母带进去,从而自动匹配函数

C语言
在这里插入图片描述
C++
在这里插入图片描述
所以C++可以构成函数重载

创作不易,记得三连!

相关文章:

【我的C++入门之旅】(上)

前言 C的发展史 1979年&#xff0c;贝尔实验室的Bjarne等人试图分析unix内核的时候&#xff0c;试图将内核模块化&#xff0c;但是发现C语言有很多的不足之处&#xff0c;于是在C语言的基础上进行扩展&#xff0c;增加了类的机制&#xff0c;完成了一个可以运行的预处理程序&…...

dcdc降压电路原理及仿真

在之前的文章 DCDC 降压芯片基本原理及选型主要参数介绍 中已经大致讲解了dcdc降压电路的工作原理&#xff0c;今天再结合仿真将buck电路工作过程讲一讲。 基本拓扑 上图为buck电路的基本拓扑结构&#xff0c;开关打到1&#xff0c;电感充电&#xff1b;开关打到0&#xff0c;…...

搭建Redis主从集群+哨兵+代理predixy

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Redis是什么&#xff1f;二、搭建Redis集群步骤1.环境和版本2.Redis 安装部署3.主从同步配置4.哨兵模式配置5.代理predixy配置 总结 前言 提示&#xff1a…...

Syncthing文件同步 - 免费搭建开源的文件自动同步服务器并公网远程访问【私人云盘】

文章目录 1. 前言2. Syncthing网站搭建2.1 Syncthing下载和安装2.2 Syncthing网页测试2.3 注册安装cpolar内网穿透 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 在数据爆炸的当下&#xff0c;每天都会产生海量的数据&#xff0c;这些…...

SQL——索引

&#x1f4a1; 索引 在关系型数据库中&#xff0c;索引是一种单独的、物理上的对数据库表中的一列或多列的值进行排序的一种存储结构&#xff0c;他是某个表中的一列或着若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单&#xff08;类似于图书目录&#x…...

Java代码组成部分

一、构造函数与默认构造函数 构造函数&#xff0c;是一种特殊方法。主要用来在创建对象时初始化对象&#xff0c;即为对象成员变量赋初始值&#xff0c;总与new运算符一起使用在创建对象的语句中。 /** * 矩形 */ class Rectangle {/*** 构造函数*/public Rectangle(int leng…...

vue2和vue3有啥区别,vue3的优点有哪些?

Vue.js 是一种流行的 JavaScript 框架&#xff0c;用于开发现代 Web 应用程序。Vue.js 具有简单易用、高效和灵活等特点&#xff0c;能够极大地提高开发效率并改进用户体验。Vue.js 一直在不断更新和改进&#xff0c;它的最新版本是 Vue 3。 在本文中&#xff0c;我们将探讨 V…...

就业内推 | 上市公司招网工,最高25k*14薪,六险一金

01 锐捷网络 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、承接本产品线&#xff08;无线或数通&#xff09;所有咨询、故障、网络变更等业务&#xff0c;响应内外部客户的业务响应需求&#xff0c;需要值班。 2、同时作为产品线技术力的核心&#xff0c;需要负责…...

低代码让开发变得不再复杂

文章目录 前言低代码 VS 传统开发为什么选择IVX&#xff1f;平台比对总结 前言 在数字化的时代背景下&#xff0c;企业都面临巨大的数字化转型的挑战。为了应对这样的挑战&#xff0c;企业软件开发工具和平台也在不断革新和发展。低代码开发平台随之应运而生&#xff0c;成为了…...

【前端客栈】使用CSS实现畅销书排行榜页面

&#x1f4ec;&#x1f4eb;hello&#xff0c;各位小伙伴们&#xff0c;我是小浪。大家都知道&#xff0c;我最近是在更新各大厂的软件测试开发的面试真题&#xff0c;也是得到了很大的反馈和好评&#xff0c;几位小伙伴也是成功找到了测开的实习&#xff0c;非常不错。如果能前…...

【周末闲谈】超越ChatGPT?科大讯飞星火认知大模型

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 ✨第一周 二进制VS三进制 ✨第二周 文心一言&#xff0c;模仿还是超越&#xff1f; ✨第二周 畅想AR 文章目录 前言星火名字的由来科大讯飞星火落地应用演示赶超ChatGPT的底气在哪里?“硬…...

第N2周:中文文本分类-Pytorch实现

目录 一、前言二、准备工作三、数据预处理1.加载数据2.构建词典3.生成数据批次和迭代器 三、模型构建1. 搭建模型2. 初始化模型3. 定义训练与评估函数 四、训练模型1. 拆分数据集并运行模型 一、前言 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 …...

Salesforce许可证和版本有什么区别,购买帐号时应该如何选择?

Salesforce许可证分配给特定用户&#xff0c;授予他们访问Salesforce产品和功能的权限。Salesforce版本和许可证是不同的概念&#xff0c;但极易混淆。 Salesforce版本&#xff1a;这是对组织购买的Salesforce产品和功能的访问权限。大致可分为Essentials、Professional、Ente…...

接口测试怎么做?全网最详细从接口测试到接口自动化详解,看这篇就够了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 抛出一个问题&…...

DataStore入门及在项目中的使用

首先给个官网的的地址&#xff1a;应用架构&#xff1a;数据层 - DataStore - Android 开发者 | Android Developers 小伙伴们可以直接看官网的资料&#xff0c;本篇文章是对官网的部分细节进行补充 一、为什么要使用DataStore 代替SharedPreferences SharedPreferences&a…...

用Python爬取中国各省GDP数据

介绍 在数据分析和经济研究中&#xff0c;了解中国各省份的GDP数据是非常重要的。然而&#xff0c;手动收集这些数据可能是一项繁琐且费时的任务。幸运的是&#xff0c;Python提供了一些强大的工具和库&#xff0c;使我们能够自动化地从互联网上爬取数据。本文将介绍如何使用P…...

深度学习-第T5周——运动鞋品牌识别

深度学习-第T5周——运动鞋品牌识别 深度学习-第T5周——运动鞋品牌识别一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目3、查看数据 四、数据预处理1、 加载数据1、设置图片格式2、划分训练集3、划分验证集4、查看标签 2、数据可视化3、检查数据4、配置数据集 …...

自媒体的孔雀效应:插根鸡毛还是专业才华?

自媒体时代&#xff0c;让许多原本默默无闻的人找到了表达自己的平台。有人声称&#xff0c;现在这个时代&#xff0c;“随便什么人身上插根鸡毛就可以当孔雀了”。可是&#xff0c;事实真的如此吗&#xff1f; 首先&#xff0c;我们不能否认的是&#xff0c;自媒体确实为大众提…...

Linux系统优化

一、系统启动流程 1.centos6 centos6开机启动流程&#xff0c;传送门 2.centos7启动流程 二、系统启动运行级别 2.1 什么是运行级别 运行级别&#xff1a;指操作系统当前正在运行的功能级别&#xff1b; [rootweb01 ~]# ll /usr/lib/systemd/system lrwxrwxrwx. 1 root root…...

Java笔记_22(反射和动态代理)

Java笔记_22 一、反射1.1、反射的概述1.2、获取class对象的三种方式1.3、反射获取构造方法1.4、反射获取成员变量1.5、反射获取成员方法1.6、综合练习1.6.1、保存信息1.6.2、跟配置文件结合动态创建 一、反射 1.1、反射的概述 什么是反射? 反射允许对成员变量&#xff0c;成…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...