第一个C++程序

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

        上边的代码就是用来打印字符串 “hello world !” 的,可见,与C语言还是有很大的差别的,接下来我们就直接进入C++的世界! 

命名空间namespace

        在我们日常写代码的过程当中,可能会在同一个域中出现变量名,函数名等等的定义重名的情况,如果还是坚持不同变量用相同的名字的话,编译器就会报错,这个时候,我们就需要用到namespace关键字

        定义命名空间

        我们首先来看下边的一张图片。

        上边是用C语言写的代码,其中就定义了两个重名的x,但是为什么这里代码没有报错,并且打印的是10呢?

        原因是这里的x一个是属于全局域,一个是属于局部域,而在默认的情况下(也就是没有指定域的情况下),编译器会默认先局部去找,然后再全局去找,因此这里就打印的是10。

        那如果两个x都在全局的位置呢?

        其实除了全局域,局部域,还有很多其它的域,我们主要探讨的是用namespace定义的域,用最简单的理解方式就是用namespace可以定义一个域,然后在这个自己定义的域里边写的东西就不会与全局的发生命名重复的冲突了,因此,namespace解决的是全局的命名重复问题。不能定义在局部。

        来看一下下边的例子。

#include<stdio.h>//命名空间的定义就是 
//namespace   命名空间名 
namespace xc
{int x = 10;
}int x = 100;//全局变量int main()
{printf("%d\n", x);//100printf("%d\n", xc::x);//10return 0;
}

        ::表示的是域作用限定符,如果它的前边什么都不加的话,就默认访问的是全局域的,上边代码里边的第一个x打印结果是100,是因为不加任何东西的情况下,编译器就先局部找,然后再全局找,如果想要访问命名空间里边的x,就要像上边的那种写法。

        这里还要额外说明一下,命名空间域不会影响变量的生命周期,因此上边命名空间域xc里的x还是属于全局变量的。

        namespace的嵌套定义:

        首先,不同文件里边的同名的命名空间域会认为是同一个。

        但在日常的工作当中,同一个项目可能会有不同的小组去完成,而不同的小组可能会使用不同名字的命名空间域,同一个namespace的内部可能又有重名的,这时候就可以用namespace的嵌套定义。看一个例子。

#include<stdio.h>namespace xxc
{namespace xc1{int rand = 1;int Add(int left, int right){return left + right;}}namespace xc2{int rand = 2;int Add(int left, int right){return (left + right) * 10;}}
}int main()
{printf("%d\n", xxc::xc1::rand);printf("%d\n", xxc::xc2::rand);printf("%d\n", xxc::xc1::Add(1, 2));printf("%d\n", xxc::xc2::Add(1, 2));return 0;
}

        命名空间使用

        在上边已经说了在编译查找的时候如果不指定在命名空间域里边查找,是不会去找的,只会默认先局部然后全局的方式去找。

        但是想要访问命名空间中的变量或者函数不止只有指定命名空间这样一种方式。还有两种方式。

        其一是可以展开命名空间中的全部成员。

        其二是可以将命名空间中的某个成员展开。

        请看下边的代码示例。

#include<stdio.h>namespace xxc
{int a = 0;int b = 10;
}//指定命名空间访问
int main()
{printf("%d\n", xxc::a);return 0;
}//展开命名空间中的某一个成员
using xxc::a;
int main()
{printf("%d\n", a);printf("%d\n",xxc::b);return 0;
}//using 将命名空间全部展开
using namespace xxc;
int main()
{printf("%d\n", a);printf("%d\n", b);
}

C++中的输入和输出

        <iostream>是 Input Output Stream的缩写,它是一个标准的输入输出流库,里边定义了标准的输入输出流对象。

        这里涉及到更深的就不在本篇博客里边讲解了,大家初学的话就了解基本用法就行。

        coutcin一个是输出的意思,一个是输入的意思,其中cout配对的是流插入运算符 << 表示输出,cin配对的是流提取运算符 >>,表示输入。并且这两个输入和输出都会自动识别类型且可以输入输出任意类型。最后一个就是endl,现在初学者暂且理解它的作用为换行就行了。

#include<iostream>
using namespace std;
int main()
{int a;float b;cin >> a >> b;cout << a << " " << b << " " << endl;return 0;
}

缺省参数

        缺省参数是在函数声明或者定义的时候的给函数形参的一个默认的值。缺省参数分为全缺省和半缺省。

        全缺省就是给函数全部的参数给缺省值,半缺省就是从右到左依次给函数参数缺省值且不能跳跃着给缺省值。

        当在调用有缺省参数的函数的时候,我们给实参是从左往后按照顺序依次给到形参的,不能间隔着给值,没有自己给值的话,函数就会用默认的缺省值。但如果那个函数是半缺省的话,那没有缺省值的参数一定要给它传值。

        最后一个点就是如果有多文件的大项目的时候,缺省值是在函数声明的时候给的,函数定义的时候就不用给缺省值了(初学者先了解)

        代码示例

#include<iostream>
using namespace std;//全缺省
void Func1(int a = 10, int b = 100, int c = 1000)
{cout << a << " " << b << " " << c << " " << endl;
}//半缺省
void  Func2(int a, int b = 100, int c = 1000)
{cout << a << " " << b << " " << c << " " << endl;
}int main()
{//调用全缺省的函数Func1();Func1(1, 2, 3);Func1(1, 2);//调用半缺省的函数Func2(1);//没有缺省值的参数必须给值Func2(1, 2);Func2(1, 2, 3);return 0;
}

函数重载

        在C++里边的同一个作用域下支持出现同名的函数,有个要求就是这些函数的形参列表是需要不同的。包括以下几点。

        1.函数的形参的个数不同

        2.函数的形参的类型不同

        3.函数的形参的类型顺序不同

        请看以下的示例

#include<iostream>
using namespace std;//声明,以下的函数重载只是举例子,就不写函数体了
//1.参数的类型不同
int Add(int a,int b)
{ }double Add(double a,double b)
{ }//2.参数的个数不同
void f()
{ }void f(int a)
{ }//3.参数的类型的顺序不同
void f(int a,char b)
{ }void f(char b, int a)
{ }int main()
{return 0;
}

        当调用有重载的函数的时候,编译器会根据这些参数的不同来自动判断我们调用的是哪个函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90634.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90634.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/90634.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建企业级Docker日志驱动:将容器日志无缝发送到腾讯云CLS

源码地址:https://github.com/k8scat/docker-log-driver-tencent-cls 在现代云原生架构中,容器化应用已经成为主流部署方式。随着容器数量的快速增长,如何高效地收集、存储和分析容器日志成为了一个关键挑战。传统的日志收集方式往往存在以下问题: 日志分散在各个容器中,难…

Kafka——消费者组重平衡能避免吗?

引言 其实在消费者组到底是什么&#xff1f;中&#xff0c;我们讲过重平衡&#xff0c;也就是Rebalance&#xff0c;现在先来回顾一下这个概念的原理和用途。它是Kafka实现消费者组&#xff08;Consumer Group&#xff09;弹性伸缩和容错能力的核心机制&#xff0c;却也常常成…

使用爬虫获取游戏的iframe地址

如何通过爬虫获取游戏的iframe地址要获取网页中嵌入的游戏的iframe地址&#xff08;即iframe元素的src属性&#xff09;&#xff0c;您可以使用网络爬虫技术。iframe是HTML元素&#xff0c;用于在当前页面中嵌入另一个文档&#xff08;如游戏页面&#xff09;&#xff0c;其地址…

NTLite Ent Version

NTLite是一款专业的系统安装镜像制作工具&#xff0c;通过这款软件可以帮助用户快速生成镜像文件打好补丁&#xff0c;很多朋友在安装电脑系统的时候一般都安装了windows系统的所有Windows组件&#xff0c;其实有很多Windows组件你可能都用到不到&#xff0c;不如在安装系统时就…

Maven之依赖管理

Maven之依赖管理一、Maven依赖管理的核心价值二、依赖的基本配置&#xff08;坐标与范围&#xff09;2.1 依赖坐标&#xff08;GAV&#xff09;2.2 依赖范围&#xff08;scope&#xff09;示例&#xff1a;常用依赖范围配置三、依赖传递与冲突解决3.1 依赖传递性示例&#xff1…

【Unity实战100例】Unity资源下载系统开发流程详解(移动端、PC端 ,局域网控制台服务)

目录 一、项目概述 二、服务器开发 1、配置文件设计 1、加载配置 2. 处理客户端请求 3. 文件下载处理 三、客户端开发 1、配置管理 1、配置加载与保存 2、下载任务管理 1、任务类设计 2、下载队列管理 3、核心下载流程 四、UI系统实现 五、部署与测试 1、服务…

[Python] -进阶理解7- Python中的内存管理机制简析

Python(尤其是 CPython)采用自动内存管理机制,核心包括引用计数(Reference Counting)与垃圾回收机制(Garbage Collection),并配合专门的内存池和分配器机制来提升效率与减少碎片。 这套机制隐藏在开发者视线之外,Python 开发者无需手动申请或释放内存。 二、Python 内…

云祺容灾备份系统AWS S3对象存储备份与恢复实操手册

1、创建密钥访问AWS控制台&#xff0c;鼠标移至右上角账户处&#xff0c;在弹出菜单中点击安全凭证&#xff0c;如图1。图1在弹出页面中&#xff0c;下滑找到访问密钥&#xff0c;并点击创建访问密钥&#xff0c;如图2。图2选择其他&#xff0c;并点击下一步&#xff0c;如图3。…

使用 LLaMA 3 8B 微调一个 Reward Model:从入门到实践

本文将介绍如何基于 Meta 的 LLaMA 3 8B 模型构建并微调一个 Reward Model&#xff0c;它是构建 RLHF&#xff08;基于人类反馈的强化学习&#xff09;系统中的关键一环。我们将使用 Hugging Face 的 transformers、trl 和 peft 等库&#xff0c;通过参数高效微调&#xff08;L…

matrix-breakout-2-morpheus靶场攻略

靶场使用将压缩包解压到一个文件夹中&#xff0c;用虚拟机应用新建虚拟机&#xff0c;扫描虚拟机&#xff0c;扫描那个文件夹&#xff0c;就可以把虚拟机扫出来了&#xff0c;然后启动虚拟机这时候靶场启动后&#xff0c;咱们现在要找到这个靶场。靶场是网页形式的&#xff0c;…

MySQL 复制表

MySQL 复制表 概述 在数据库管理中&#xff0c;复制表是一项常用的操作。它允许数据库管理员将一个表中的数据复制到另一个表中&#xff0c;无论是同一个数据库还是不同的数据库。MySQL数据库提供了多种方法来复制表&#xff0c;本文将详细介绍MySQL复制表的过程、方法及其应用…

『哈哥赠书 - 55期』-『码农职场:IT人求职就业手册』

文章目录⭐️ 码农职场&#xff1a;IT人求职就业手册⭐️ 本书简介⭐️ 作者简介⭐️ 编辑推荐这是一本专为广大IT行业求职者量身定制的指南&#xff0c;提供了从职前准备到成功就业的全方位指导&#xff0c;涵盖了职业目标规划、自我技能评估、求职策略、简历准备以及职场心理…

单片机学习课程

单片机学习课程 课程介绍 单片机技术作为现代工业自动化、电子电气、通信及物联网等领域的主流技术&#xff0c;早已深度融入我们生活与生产的各个角落。从常见家电到自动化公共设施&#xff0c;都离不开单片机的支持。同时&#xff0c;它也是学习 ARM 嵌入式系统、FPGA 设计等…

【AcWing 143题解】最大异或对

AcWing 143. 最大异或对 【题目描述】 在查看解析之前&#xff0c;先给自己一点时间思考哦&#xff01; 【题解】 本题要求给定一个整数序列&#xff0c;找出其中任意两个数进行异或运算后&#xff0c;结果的最大值是多少。由于数据规模较大&#xff0c;我们不能简单地通过两…

SQLAlchemy 2.0简单使用

记录一下SQLAlchemy 2.0连接mysql数据库的方法及简单使用 环境及依赖 Python:3.8 mysql:8.3 Flask:3.0.3 SQLAlchemy:2.0.37 PyMySQL:1.1.1使用步骤 1、创建引擎&#xff0c;链接到mysql engine create_engine(mysqlpymysql://{username}:{password}{ip}:3306/{database_name}…

如何创建或查看具有 repo 权限的 GitHub 个人访问令牌(PAT)

要创建或查看具有 repo 权限的 GitHub 个人访问令牌(PAT),请按照以下步骤操作: 一、生成具有 repo 权限的 PAT 登录 GitHub 访问 GitHub 官网,使用你的账户登录。 进入开发者设置 点击右上角头像,选择 Settings(设置) → 左侧菜单中选择 Developer settings(开发者设…

【AI时代速通QT】第五节:Qt Creator如何引入第三方库,以OpenCV为例

目录 引言 一、第一步&#xff1a;万事开头难 - 准备工作 1.1 获取并“安装”OpenCV 1.2 创建一个新的Qt项目 1.3 建立专业的项目目录结构 二、第二步&#xff1a;核心操作 - 配置.pro文件 2.1 方式一&#xff1a;图形化向导&#xff08;适合初次体验&#xff09; 2.2 …

使用Clion开发STM32(Dap调试)

使用Clion开发STM32环境配置ST-Link无法下载OpenOCDST-Link调试Dap-Link调试Debug配置查看寄存器值之前写了一篇文章关于如何用VSCode配合EIDE插件开发STM32 最近研究了如何使用Clion开发STM32 环境配置 使用Clion开发STM32需要用到4个工具&#xff1a;Clion、STM32CubeMX、…

人工智能-python-OpenCV 中 `release()` 和 `destroy()` 的区别

文章目录OpenCV 中 release() 和 destroy() 的区别1. release()常见使用场景&#xff1a;代码示例&#xff1a;作用&#xff1a;2. destroy()常见使用场景&#xff1a;代码示例&#xff1a;作用&#xff1a;3. 总结&#xff1a;4. 何时使用小结&#xff1a;OpenCV 中 release()…

[RPA] 日期时间练习案例

案例1根据日期拆分表格根据表格中不同日期&#xff0c;创建多个对应日期名称的Sheet页(名称格式为"yyyy-mm-dd")&#xff0c;并将同一日期的订单拷贝至对应Sheet页日期时间练习题1.xlsx流程搭建&#xff1a;实现效果&#xff1a;