C++入门基础篇(1)
欢迎大家来到海盗猫鸥的博客——
断更许久,让我们继续好好学习吧!

目录
1.namespace命名空间
命名空间的存在价值:
命名空间的定义:
命名空间的使用:
2.C++输入输出函数
使用:
3.缺省参数
4.函数重载
结语:
1.namespace命名空间
命名空间的存在价值:
在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全 局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名 冲突或名字污染,namespace关键字的出现就是针对这种问题的
简而言之,当同一个项目中存在多个名字相同的变量时,可以防止命名冲突或者名字污染,也可以便于区分。在大型项目的开发中可以说必不可少。
命名空间的定义:
namespace就是命名空间的关键字,在关键字后加上命名空间的名字,在加上{}来限定范围即可。
namespace hdmo {int a = 1; }注意:命名空间最后的' } '后面不用加上' ; ',区别于结构体,和函数类似。
命名空间本质就是我们创建了一个域,区别全局作用域而独立,就像每一个函数都有一个作用域一样,每个函数里的参数作用域都在函数范围内。命名空间也同理,每个命名空间中的函数、变量等的作用域都在命名空间的限定范围内,需要通过调用命名空间才能使用,但需要注意的是,命名空间中的函数变量等,生命周期都是全局的
namespace只能在全局作用域下定于,也可以嵌套定义。
在同一个项目中,相同名字的命名空间会被认为是同一个命名空间。
namespace hdmo {int a = 1; }namespace hdmo {int b = 1; }此时两个hdmo表示的就是同一个命名空间
而C++的标准库就存放在了名叫std(standard)的命名空间中,以此防止和其他语言的函数冲突,这也是为什么C++的程序中为什么基本都包含了一个
using namespace std;
就是为了包含C++的标准库。
命名空间的使用:
由于命名空间是一个域,想要在外部使用其中的函数变量等内容时,就需要像结构体一样使用一个操作符来实现这个操作。
命名空间的调用操作符即为两个冒号 ::
#include <stdio.h>namespace hdmo {int a = 1; } int a = 2; int main() {printf("%d\n", a);printf("%d\n", ::a);printf("%d\n", hdmo::a);return 0; }
从输出结果我们可以知道:当::前面为空时,默认调用全局作用域的变量。
命名空间中的变量函数等,在使用时有三种方式:
1.单个访问:使用 :: 来单独访问一个命名空间中的变量或者函数,最安全的使用方式;
2.单个展开:使用using单独展开一个变量或者函数,展开后,其作用域就变为了全局作用域,不再受限于命名空间。推荐常用的在不冲突的条件下使用这种方式。
3.全展开:直接将指定的命名空间全部展开,在项目中不推荐使用,冲突风险较大,可以在小型的程序中使用(C++标准库的标准库就是全展开的,所以我们在使用cin和cout时,不需要在前面加上std::)
2.C++输入输出函数
在C语言中我们的输入输出语句分别为scanf和printf,C++也兼容C语言的输入输出语句,但也有自己的输入输出函数,即cin和cout。
要想使用cin和cout函数,就要包含<iostream>标准输入输出流库,并且要包含C++的标准函数库
#include <iostream>
using namespace std;
使用:
cin在使用时用' >> '来输入;
cout在使用时用’ << ‘来输出。
<<是流插⼊运算符,>>是流提取运算符(<<和>>在C语言中还表示左移和右移运算符)
#include <iostream>
using namespace std;
int main()
{int a = 0;cin >> a;cout << a << endl;printf("%d\n", a);return 0;
}
endl我们可以先简单理解为换行'\n';基础部分不做过多讲解,以后的学习中会补充。
上述代码我们可以看出,cin和cout没有像scanf和printf一样使用%d,%c等来控制变量的输入输出格式,这是因为cin和cout可以自动识别变量和数据的类型,这是相对方便的地方。
在VS2022环境中,上述代码中不包含<stdio.h>,也能使用scanf和prinf函数,这是因为在VS中<iostream>间接包含了<stdio.h>,所以可以直接使用,但在其他编译环境下可能就需要包含<stdio.h>。
在想要实现控制精度等操作时,推荐直接使用C语言的输入输出方法来实现,C++中想要实现这个操作反而会更麻烦。
需要注意的是,scanf和printf的速度相对于cin和cout是更快的,在竞赛中卡运行时长的题目中可以直接使用scanf和printf,而下面代码可以提高cin和cout的效率,但本篇先不做解释。
#include <iostream>
using namespace std;
int main()
{// 在io需求⽐较⾼的地⽅,如部分⼤量输⼊的竞赛题中,加上以下3⾏代码// 可以提⾼C++IO效率ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);return 0;
}
3.缺省参数
缺省参数就是在声明或者定义函数的时候给函数参数一个缺省值,当我们调用函数时,若缺省参数没有传值,就使用定义好的缺省值,若传值,就使用传递的值。
缺省参数分为全缺省和半缺省;全缺省就是全部形参都给缺省值,半缺省就是部分形参给缺省值。且C++规定半缺省参数必须从右往左 依次连续缺省,不能间隔跳跃给缺省值。
#include <iostream>
using namespace std;
namespace hdmo
{//全缺省int Fun1(int x = 0, int y = 0){return x + y;}//半缺省int Fun2(int x, int y = 0){return x + y;}
}int main()
{cout << hdmo::Fun1() << endl;//全缺省可以不传参cout << hdmo::Fun1(1) << endl;cout << hdmo::Fun1(1,1) << endl;/*cout << hdmo::Fun2() << endl;//半缺省不能不传参*/cout << hdmo::Fun2(2) << endl;cout << hdmo::Fun2(2,2) << endl;return 0;
}
上述代码结果为:
半缺省必须保证缺省参数从最右往左定义和定义连续性,普通参数在左,缺省参数在右。
4.函数重载
函数重载,即为同时存在多个函数名相同的函数,同一个函数名同时表示个多个函数,即为重载。
他们之间的区别由参数类型和数量来决定,和返回值类型无关,仅返回值类型不同的两个同名函数无法实现重载。

#include <iostream>
using namespace std;
namespace hdmo
{int Add(int x, int y){return x + y;}double Add(double x, int y){return x + y;}double Add(int x, double y){return x + y;}double Add(double x, double y){return x + y;}
}
int main()
{using hdmo::Add;cout << Add(1, 1) << endl;cout << Add(1.1, 1) << endl;cout << Add(1, 1.1) << endl;cout << Add(1.1, 1.1) << endl;return 0;
}
结果为:
通过上述代码我们就可以看出,重载的使用可以使我们更加方便的使用函数。若在C语言中,要实现上述效果,就要使用四个不同的函数名定义四个函数,使用时区分使用,而C++中有了重载之后,我们就可以将所有的加法函数都统一为一个名字,使用时也不用区分,直接使用即可,非常方便。
结语:
本篇C++入门基础篇就先讲到这里,后序会继续讲解其他的入门基础知识,欢迎大家继续莅临指教。
有不足的地方大家可以私信或者评论区指出!
个人主页:海盗猫鸥-CSDN博客
这里是小鸥!我们下期见~(*¯︶¯*)~

相关文章:
C++入门基础篇(1)
欢迎大家来到海盗猫鸥的博客—— 断更许久,让我们继续好好学习吧! 目录 1.namespace命名空间 命名空间的存在价值: 命名空间的定义: 命名空间的使用: 2.C输入输出函数 使用: 3.缺省参数 4.函数重载…...
基于html开发的在线网址导航在线工具箱源码
基于html开发的在线网址导航在线工具箱源码,将全部文件复制到服务器,入口文件是index.html 如需修改网址,可修改index.html 如需修改关于页面,可修改about里面的index页面 源码下载:https://download.csdn.net/down…...
【密码学】大整数分解问题和离散对数问题
公钥密码体制的主要思想是通过一种非对称性,即正向计算简单,逆向计算复杂的加密算法设计,来解决安全通信。本文介绍两种在密码学领域内最为人所熟知、应用最为广泛的数学难题——大整数分解问题与离散对数问题 一、大整数分解问题 …...
解析 pdfminer layout.py LAParams类及其应用实例
解析 pdfminer layout.py LAParams类及其应用实例 引言类的定义1. line_overlap2. char_margin3. word_margin4. line_margin5. boxes_flow6. detect_vertical7. all_texts 类的初始化参数验证类的表示总结 引言 在这篇文章中,我们将解析一个叫做 LAParams 的类。这…...
Redis官方可视化管理工具
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl RedisInsight是一个Redis可视化工具,提供设计、开发和优化 Redis 应用程序的功能。RedisInsight分为免费的社区版和一个付费的企业版,免费版具有基本…...
android 固定图片大小
在Android中,固定图片大小可以通过多种方法实现,这些方法主要涉及到ImageView控件的使用、Bitmap类的操作,以及第三方库(如Glide)的辅助。以下是几种常见的方法: 1. 使用ImageView控件 在Android的布局文…...
操作系统——内存管理(面试准备)
虚拟内存 单片机没有操作系统,每次写完代码,都需要借助工具把程序烧录进去,这样程序才能跑起来。 另外,单片机的CPU是直接操作内存的物理地址。 在这种情况下,想在内存中同时运行两个程序是不可能的,如果第…...
vue3实现vuedraggable实现拖拽到垃圾桶图标位置进行删除
当使用Vue 3和vuedraggable库时,你可以按照以下方式实现拖拽到垃圾桶图标位置进行删除的功能: 首先,确保你已经安装了vuedraggable库。如果没有安装,可以通过以下命令进行安装: vuedraggable 和vue-draggable-plus使…...
MySQL向自增列插入0失败问题
问题 在一次上线时,发现通过脚本添加的状态表中,待提交的状态不正确,本来应该是0,线上是101。 原因 默认情况下,MySQL对应自增列,认为0和null等价(因为mysql认为0不是最佳实践不推荐使用&…...
Python:Python基础知识(注释、命名、数据类型、运算符)
.注释 Python有两种注释方法:单行注释和多行注释。单行注释以#开头,多行注释以三个单引号 或三个双引号 """ 开头和结尾。 2.命名规则 命名规则: 大小写字母、数字、下划线和汉字等字符及组合; 注意事项: 大小写敏感、首…...
Protobuf: 大数据开发中的高效数据传输利器
作为一名大数据开发者,我经常需要处理海量的数据传输和存储。在这个过程中,选择一个高效、可靠的数据序列化工具至关重要。今天,我想和大家分享一下我在项目中使用 Protobuf 的经历。 目录 故事背景Protobuf 简介优点: 实战案例示…...
MySQL 面试相关问题
写在前面: 不喜勿喷,暴躁作者又不求你给钱【没办法,遇见的狗喷子太多了🐶】欢迎大家在评论区留言,指正文章中的信息错误有一些其他相关的问题,可以直接评论区留言,作者看到会及时更新到文章末尾…...
java org.aeonbits.owner库介绍
org.aeonbits.owner 是一个用于简化Java应用程序配置管理的库。它通过使用接口和注解来定义和读取配置,使得配置管理更加简洁和类型安全。以下是对这个库的一些主要特性和功能的介绍: 主要特性 类型安全的配置: OWNER 库允许开发者使用接口定义配置,从而提供了编译时的类型…...
YOLOv10改进 | 添加注意力机制篇 | 添加LSKAttention大核注意力机制助力极限涨点
一、本文介绍 在这篇文章中,我们将讲解如何将LSKAttention大核注意力机制应用于YOLOv10,以实现显著的性能提升。首先,我们介绍LSKAttention机制的基本原理,它主要通过将深度卷积层的2D卷积核分解为水平和垂直1D卷积核࿰…...
学习笔记——动态路由——IS-IS中间系统到中间系统(特性之路由撤销)
6、路由撤销 ISIS路由协议的路由信息是封装在LSP报文中的TLV中的,但是它对撤销路由的处理和OSPF的处理方式类似。 在ISIS中撤销一条路由实则是将接口下的ISIS关闭: 撤销内部路由: 在ISIS中路由信息是由IP接口TLV和IP内部可达性TLV共同来描…...
智能无人机控制:STM32微控制器与机器学习集成(内附资料)
智能无人机控制结合了STM32微控制器的实时处理能力和机器学习算法的决策能力,以实现更高级的自主飞行和任务执行。以下是智能无人机控制系统的概述,包括系统架构、关键组件、集成方法和示例代码。 系统概述 智能无人机控制系统利用STM32微控制器进行实…...
力扣 454四数相加
这个题给了四个数组,可以两两判断,就类比两数相加那道题了 对于num1 num2 用unordered_map存储,key是num1,num2中数字相加之和,value是值出现的次数 for(int a:num1) {for(int b:num2 {map[ab]; 最后要计算四个数…...
Java面试题系列 - 第9天
题目:深入探讨Java中的设计模式及其应用场景 背景说明:设计模式是软件工程中解决问题的常见方案,它们提供了经过验证的模板,帮助开发者解决在软件设计过程中遇到的特定问题。在Java中,熟悉并正确应用设计模式能够显著…...
数据结构【顺序表】
目录 线性表 顺序表 概念与结构 分类 静态顺序表 动态顺序表 动态顺序表的实现 在头文件中创建结构体 初始化顺序表 销毁顺序表(可以留到后面再看) 尾插数据 申请空间 打印顺序表数据 头插数据 尾删除数据 头删除数据 在指定位置插…...
【JavaScript 报错】未捕获的类型错误:Uncaught TypeError
🔥 个人主页:空白诗 文章目录 一、错误原因分析1. 调用不存在的方法2. 访问未定义的属性3. 数据类型不匹配4. 函数参数类型不匹配 二、解决方案1. 检查方法和属性是否存在2. 使用可选链操作符3. 数据类型验证4. 函数参数类型检查 三、实例讲解四、总结 在…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...


