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. 函数参数类型检查 三、实例讲解四、总结 在…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础
在构建任何动态、数据驱动的Web API时,一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说,深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言,以及学会如何在Python中操作数据库,是…...


