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

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)

欢迎大家来到海盗猫鸥的博客—— 断更许久&#xff0c;让我们继续好好学习吧&#xff01; 目录 1.namespace命名空间 命名空间的存在价值&#xff1a; 命名空间的定义&#xff1a; 命名空间的使用&#xff1a; 2.C输入输出函数 使用&#xff1a; 3.缺省参数 4.函数重载…...

基于html开发的在线网址导航在线工具箱源码

基于html开发的在线网址导航在线工具箱源码&#xff0c;将全部文件复制到服务器&#xff0c;入口文件是index.html 如需修改网址&#xff0c;可修改index.html 如需修改关于页面&#xff0c;可修改about里面的index页面 源码下载&#xff1a;https://download.csdn.net/down…...

【密码学】大整数分解问题和离散对数问题

公钥密码体制的主要思想是通过一种非对称性&#xff0c;即正向计算简单&#xff0c;逆向计算复杂的加密算法设计&#xff0c;来解决安全通信。本文介绍两种在密码学领域内最为人所熟知、应用最为广泛的数学难题——大整数分解问题与离散对数问题 一、大整数分解问题 &#xf…...

解析 pdfminer layout.py LAParams类及其应用实例

解析 pdfminer layout.py LAParams类及其应用实例 引言类的定义1. line_overlap2. char_margin3. word_margin4. line_margin5. boxes_flow6. detect_vertical7. all_texts 类的初始化参数验证类的表示总结 引言 在这篇文章中&#xff0c;我们将解析一个叫做 LAParams 的类。这…...

Redis官方可视化管理工具

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl RedisInsight是一个Redis可视化工具&#xff0c;提供设计、开发和优化 Redis 应用程序的功能。RedisInsight分为免费的社区版和一个付费的企业版&#xff0c;免费版具有基本…...

android 固定图片大小

在Android中&#xff0c;固定图片大小可以通过多种方法实现&#xff0c;这些方法主要涉及到ImageView控件的使用、Bitmap类的操作&#xff0c;以及第三方库&#xff08;如Glide&#xff09;的辅助。以下是几种常见的方法&#xff1a; 1. 使用ImageView控件 在Android的布局文…...

操作系统——内存管理(面试准备)

虚拟内存 单片机没有操作系统&#xff0c;每次写完代码&#xff0c;都需要借助工具把程序烧录进去&#xff0c;这样程序才能跑起来。 另外&#xff0c;单片机的CPU是直接操作内存的物理地址。 在这种情况下&#xff0c;想在内存中同时运行两个程序是不可能的&#xff0c;如果第…...

vue3实现vuedraggable实现拖拽到垃圾桶图标位置进行删除

当使用Vue 3和vuedraggable库时&#xff0c;你可以按照以下方式实现拖拽到垃圾桶图标位置进行删除的功能&#xff1a; 首先&#xff0c;确保你已经安装了vuedraggable库。如果没有安装&#xff0c;可以通过以下命令进行安装&#xff1a; vuedraggable 和vue-draggable-plus使…...

MySQL向自增列插入0失败问题

问题 在一次上线时&#xff0c;发现通过脚本添加的状态表中&#xff0c;待提交的状态不正确&#xff0c;本来应该是0&#xff0c;线上是101。 原因 默认情况下&#xff0c;MySQL对应自增列&#xff0c;认为0和null等价&#xff08;因为mysql认为0不是最佳实践不推荐使用&…...

Python:Python基础知识(注释、命名、数据类型、运算符)

.注释 Python有两种注释方法&#xff1a;单行注释和多行注释。单行注释以#开头&#xff0c;多行注释以三个单引号 或三个双引号 """ 开头和结尾。 2.命名规则 命名规则: 大小写字母、数字、下划线和汉字等字符及组合&#xff1b; 注意事项: 大小写敏感、首…...

Protobuf: 大数据开发中的高效数据传输利器

作为一名大数据开发者&#xff0c;我经常需要处理海量的数据传输和存储。在这个过程中&#xff0c;选择一个高效、可靠的数据序列化工具至关重要。今天&#xff0c;我想和大家分享一下我在项目中使用 Protobuf 的经历。 目录 故事背景Protobuf 简介优点&#xff1a; 实战案例示…...

MySQL 面试相关问题

写在前面&#xff1a; 不喜勿喷&#xff0c;暴躁作者又不求你给钱【没办法&#xff0c;遇见的狗喷子太多了&#x1f436;】欢迎大家在评论区留言&#xff0c;指正文章中的信息错误有一些其他相关的问题&#xff0c;可以直接评论区留言&#xff0c;作者看到会及时更新到文章末尾…...

java org.aeonbits.owner库介绍

org.aeonbits.owner 是一个用于简化Java应用程序配置管理的库。它通过使用接口和注解来定义和读取配置,使得配置管理更加简洁和类型安全。以下是对这个库的一些主要特性和功能的介绍: 主要特性 类型安全的配置: OWNER 库允许开发者使用接口定义配置,从而提供了编译时的类型…...

YOLOv10改进 | 添加注意力机制篇 | 添加LSKAttention大核注意力机制助力极限涨点

一、本文介绍 在这篇文章中&#xff0c;我们将讲解如何将LSKAttention大核注意力机制应用于YOLOv10&#xff0c;以实现显著的性能提升。首先&#xff0c;我们介绍LSKAttention机制的基本原理&#xff0c;它主要通过将深度卷积层的2D卷积核分解为水平和垂直1D卷积核&#xff0…...

学习笔记——动态路由——IS-IS中间系统到中间系统(特性之路由撤销)

6、路由撤销 ISIS路由协议的路由信息是封装在LSP报文中的TLV中的&#xff0c;但是它对撤销路由的处理和OSPF的处理方式类似。 在ISIS中撤销一条路由实则是将接口下的ISIS关闭&#xff1a; 撤销内部路由&#xff1a; 在ISIS中路由信息是由IP接口TLV和IP内部可达性TLV共同来描…...

智能无人机控制:STM32微控制器与机器学习集成(内附资料)

智能无人机控制结合了STM32微控制器的实时处理能力和机器学习算法的决策能力&#xff0c;以实现更高级的自主飞行和任务执行。以下是智能无人机控制系统的概述&#xff0c;包括系统架构、关键组件、集成方法和示例代码。 系统概述 智能无人机控制系统利用STM32微控制器进行实…...

力扣 454四数相加

这个题给了四个数组&#xff0c;可以两两判断&#xff0c;就类比两数相加那道题了 对于num1 num2 用unordered_map存储&#xff0c;key是num1&#xff0c;num2中数字相加之和&#xff0c;value是值出现的次数 for(int a:num1) {for(int b:num2 {map[ab]; 最后要计算四个数…...

Java面试题系列 - 第9天

题目&#xff1a;深入探讨Java中的设计模式及其应用场景 背景说明&#xff1a;设计模式是软件工程中解决问题的常见方案&#xff0c;它们提供了经过验证的模板&#xff0c;帮助开发者解决在软件设计过程中遇到的特定问题。在Java中&#xff0c;熟悉并正确应用设计模式能够显著…...

数据结构【顺序表】

目录 ​ 线性表 顺序表 概念与结构 分类 静态顺序表 动态顺序表 动态顺序表的实现 在头文件中创建结构体 初始化顺序表 销毁顺序表&#xff08;可以留到后面再看&#xff09; 尾插数据 申请空间 打印顺序表数据 头插数据 尾删除数据 头删除数据 在指定位置插…...

【JavaScript 报错】未捕获的类型错误:Uncaught TypeError

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、错误原因分析1. 调用不存在的方法2. 访问未定义的属性3. 数据类型不匹配4. 函数参数类型不匹配 二、解决方案1. 检查方法和属性是否存在2. 使用可选链操作符3. 数据类型验证4. 函数参数类型检查 三、实例讲解四、总结 在…...

html+css+js随机验证码

随机画入字符、线条 源代码在图片后面 点赞❤️关注&#x1f60d;收藏⭐️ 互粉必回 图示 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"…...

WPS打开PDF文件的目录

WPS打开PDF文件的目录 其实WPS中PDF文件并没有像Word那样标准的目录&#xff0c;但是倒是有书签&#xff0c;和目录一个效果 点击左上角书签选项&#xff0c;或者使用Alt Shift 1快捷键即可...

常见 Web漏洞分析与防范研究

前言&#xff1a; 在当今数字化时代&#xff0c;Web应用程序扮演着重要的角色&#xff0c;为我们提供了各种在线服务和功能。然而&#xff0c;这些应用程序往往面临着各种潜在的安全威胁&#xff0c;这些威胁可能会导致敏感信息泄露、系统瘫痪以及其他不良后果。 SQL注入漏洞 …...

暗黑魅力:Xcode全面拥抱应用暗黑模式开发指南

暗黑魅力&#xff1a;Xcode全面拥抱应用暗黑模式开发指南 随着苹果在iOS 13和iPadOS 13中引入暗黑模式&#xff0c;用户可以根据自己的喜好或环境光线选择不同的界面主题。作为开发者&#xff0c;支持暗黑模式不仅能提升用户体验&#xff0c;还能彰显应用的专业性。Xcode提供了…...

【游戏引擎之路】登神长阶(七)——x86汇编学习:凡做难事,必有所得

5月20日-6月4日&#xff1a;攻克2D物理引擎。 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 6月13日-6月20日&#xff1a;攻克《3D图形教程》。 6月21日-6月22日&#xff1a;攻克《Raycasting游戏教程》。 6月23日-7月1日&#xff1a;攻克《Windows游戏编程大师技巧》。 7月…...

在 Windows 平台搭建 MQTT 服务

引言 MQTT 是一种轻量级、基于发布/订阅模式的消息传输协议&#xff0c;旨在用极小的代码空间和网络带宽为物联网设备提供简单、可靠的消息传递服务。MQTT 经过多年的发展&#xff0c;如今已被广泛应用于资源开采、工业制造、移动通信、智能汽车等各行各业&#xff0c;使得 MQ…...

jdevelope安装

准备 1.jdk1.8&#xff08;已经安装不做记录&#xff09; 2.下载jdevelope安装包 3.安装包安装jdevelope开发工具 4.创建或导入项目 下载jdevelope安装包 官网下载地址&#xff1a;https://edelivery.oracle.com 安装包安装jdevelope开发工具 cmd管理员权限运行安装脚本…...

排序(一)——冒泡排序、直接插入排序、希尔排序(BubbleSOrt,InsertSort,ShellSort)

欢迎来到繁星的CSDN&#xff0c;本期的内容主要包括冒泡排序(BubbleSort&#xff09;&#xff0c;直接插入排序(InsertSort)&#xff0c;以及插入排序进阶版希尔排序&#xff08;ShellSort&#xff09;。 废话不多说&#xff0c;直接上正题&#xff01; 一、冒泡排序 冒泡排序…...

synchronized关键字详解(全面分析)

目录 synchronized关键字详解1、synchronized关键字简介2、synchronized作用和使用场景作用使用场景①、用在代码块上(类级别同步)②、用在代码块上(对象级别同步)③、用在普通方法上(对象级别同步)④、用在静态方法上(类级别同步)总结&#xff1a; 3、synchronized底层原理&am…...

数据建设实践之大数据平台(三)

安装hadoop 上传安装文件到/opt/software目录并解压 [bigdatanode101 software]$ tar -zxvf hadoop-3.3.5.tar.gz -C /opt/services/ 配置环境变量 [bigdatanode101 ~]$ sudo vim /etc/profile.d/bigdata_env.sh export JAVA_HOME/opt/services/jdk1.8.0_161 export ZK_HO…...