【C++】入门基础(命名空间、缺省参数、函数重载)

目录

一.命名空间:namespace

1.namespace的价值

2.namespace的定义

3.namespace的使用方法

3.1 域解析运算符::

3.2 using展开

3.3 using+域解析运算符

二.输入输出

三.缺省参数

四.函数重载

1.参数类型不同

2.参数个数不同

3.参数顺序不同


一.命名空间:namespace

1.namespace的价值

在C/C++中,存在大量变量、函数,它们的名称都存在在全局作用域中,可能会导致很多冲突。使用命名空间的目的就是对标识符的名称进行本地化,避免命名的冲突。

2.namespace的定义

使用namespace关键字定义一个域,这个域跟全局域各自独立,不同的域中可以定义相同名字的变量,这就避免的命名的冲突。其中C++标准库都放在一个叫std(standard)的命名空间中。例如以下代码:同一个名的变量rand在不同域中表现不同的内容

TIPs:cout<<  <<endl相当于C语言中的printf(" \n");

#include<iostream>
#include<stdlib.h>
using namespace std;namespace zyh
{int rand = 10;
}int main()
{//默认是std::rand//标准库中rand是一个地址cout << rand << endl;//命名空间zyh中rand是一个Int变量cout << zyh::rand << endl;return 0;
}

 ​​​​

C++中域有局部域,全局域,命名空间域,类域;局部域、全局域会影响编译查找逻辑和变量的生命周期,但命名空间域和类域不会影响变量的生命周期。

namespce只能定义在全局中,并且支持嵌套定义。项目工程文件中多文件中定义的同名namespace会被认为是一个namespace,自动合并到一起。

//嵌套定义
namespace zyh
{int rand = 10;namespace zyh2{int rand = 20;}
}

3.namespace的使用方法

3.1 域解析运算符::

在变量名前加上(命名空间名) + :: (域解析运算符)就可以访问指定命名空间域中的变量了,例如:

namespace zyh
{int a = 10;int b = 20;
}int main()
{//访问命名空间域zyh中的a和bcout<<zyh::a<<endl;cout<<zyh::b<<endl;return 0;
}

3.2 using展开

using + (命名空间名);直接将命名空间内的所有成员全部展开,也就是说展开后无需加域解析运算符就可访问,但这种方式风险极大,不推荐在项目中使用,例如:

namespace zyh
{int a = 10;int b = 20;
}//直接使用using展开命名空间zyh
using namespce zyh;
int main()
{/展开后就能直接访问命名空间域zyh中的a和bcout<<a<<endl;cout<<b<<endl;return 0;
}

3.3 using+域解析运算符

这就是前两者的结合版,将命名空间域中的某个成员进行展开使用,这种方式是比较合理的,也经常使用到,例如cout和endl是std命名空间中的输出和换行,由于经常要用到,因此可以在程序最开头直接将这两个成员进行展开,此后方便使用。

using std::cout;
using std::endl;int main()
{int a = 10;cout<<a<<endl;
}

二.输入输出

C++的输入输出相较于C语言就舒服多了,C++不需要自己手动输入格式,它能自动识别变量的类型(本质是通过函数重载实现的)并进行输入输出。

  1. <iostream>是input,output stream的缩写,是标准输入、输出流库,定义了标准的输入、输出对象
  2. std::cin相当于scanf,配合流插入运算符>>,实现数据的输入
  3. std::cout相当于printf,配合流输出运算符<<,实现数据的输出
  4. std:endl相当于换行(此时可以这么理解)
using std::cout;
using std::endl;
using std::cin;
int main()
{int a;double b;char c;//不同类型的abc,cin和cout都能自动识别处理cin >> a;cin >> b;cin >> c;cout << a << "/" << b << "/" << c << endl;return 0;
}

三.缺省参数

有些地方缺省参数也叫做默认参数,它是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定的实参,则采用该形参的缺省值,否则就使用指定的实参。

全缺省就是全部形参都给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。原因很好理解,就是为了防止歧义,例如4个参数中只有第一个和最后一个有缺省值,那么若给的实参有3个,应该如何分配?为了应对这些情况,C++特意做出的规定。

函数声明和定义分离的时候,缺省参数不能在函数声明和定义中同时出现,否则就会出现歧义,规定必须函数声明给缺省值。

//全缺省
void func1(int a = 10, int b = 20, int c = 30)
{cout << a << "/" << b << "/" << c << endl;
}//半缺省
void func2(int a, int b = 0, int c = 0)
{cout << a << "/" << b << "/" << c << endl;
}int main()
{func1();func1(666);func1(1, 2, 3);func2(6);func2(6, 7, 8);return 0;
}

四.函数重载

C++支持在同一作用域下出现相同的函数名,区别在于这些同名函数的形参不同,这个不同,可以是参数个数,参数类型,或参数顺序。C语言是不支持同一作用域中出现同名函数的,这一改动就是为了方便使用,更加灵活。

1.参数类型不同

int Add(int a, int b)
{return a + b;
}double Add(double a, double b)
{return a + b;
}int main()
{cout << Add(3, 4) << endl;cout << Add(1.1, 2.2) << endl;return 0;
}

2.参数个数不同

int Add(int a, int b)
{return a + b;
}int Add(int a, int b, int c)
{return a + b + c;
}

3.参数顺序不同

实际上也就是参数类型不同

void f(int a, double b)
{cout << "f1" << endl;
}void f(double b, int a)
{cout << "f2" << endl;
}int main()
{f(1, 1.2);f(2.2, 4);return 0;
}

注意:返回值不能最为函数重载的条件,因为调用函数的时候无法区分,因此只能将参数的区别作为函数重载的依据 

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

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

相关文章

分析逆向案例十七——深圳大学登录逆向(新类型,有些加密参数是通过页面源代码获取的,不同于前面有发包)

网址&#xff1a;aHR0cDovL25ld2F1dGhzZXJ2ZXIuc3p1LmVkdS5jbi9hdXRoc2VydmVyL2xvZ2lu 登陆页面&#xff0c;找到登录接口&#xff0c;发现登录接口是document类型&#xff0c;而不是xhr类型&#xff0c;无法跟栈分析。 登陆两次&#xff0c;发现有两个加密参数&#xff0c;lt…

君方智能设计平台-夹点交互编辑架设计与实现

1.背景介绍 在图形平台开发中&#xff0c;实现强大的图形编辑功能对于用户体验至关重要。夹点&#xff08;Grips&#xff09;编辑是其中的一个关键部分&#xff0c;它不仅简化了用户与图形对象的交互&#xff0c;还提供了多种功能&#xff0c;从简单的移动和缩放到复杂的旋转和…

JS爬虫实战之极验四代

极验四代滑块验证码 一、目标网站说明二、流程步骤1. 逆向步骤一般分为&#xff1a;2. 接口确认1- 确认流程2- 获取verify的参数3- 构建requests验证verify的参数4- 锁定secode参数的作用 ok&#xff0c;让我们去获取verify接口中的响应&#xff01;&#xff01;&#xff01; 3…

风光摄影:相机设置和镜头选择

写在前面 博文内容为《斯科特凯尔比的风光摄影手册》读书笔记整理涉及在风景拍摄中一些相机设置&#xff0c;镜头选择的建议对小白来讲很实用&#xff0c;避免拍摄一些过曝或者过暗的风景照片理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于虚度时间和没有好…

240712_昇思学习打卡-Day24-LSTM+CRF序列标注(3)

240712_昇思学习打卡-Day24-LSTMCRF序列标注&#xff08;3&#xff09; 今天做LSTMCRF序列标注第三部分&#xff0c;同样&#xff0c;仅作简单记录及注释&#xff0c;最近确实太忙了。 Viterbi算法 在完成前向训练部分后&#xff0c;需要实现解码部分。这里我们选择适合求解…

【Linux】进程间通信——消息队列和信号量

目录 消息队列&#xff08;message queue&#xff09; 信号量&#xff08;Semaphore&#xff09; system V版本的进程间通信方式有三种&#xff1a;共享内存&#xff0c;消息队列和信号量。之前我们已经说了共享内存&#xff0c;那么我们来看一下消息队列和信号量以及它们之间…

Docker容器的生命周期

引言 Docker 容器作为一种轻量级虚拟化技术&#xff0c;在现代应用开发和部署中扮演着重要角色。理解容器的生命周期对于有效地管理和运维容器化应用至关重要。本文将深入探讨 Docker 容器的生命周期&#xff0c;从创建到销毁的各个阶段&#xff0c;帮助读者更好地掌握容器管理…

Unity最新第三方开源插件《Stateful Component》管理中大型项目MonoBehaviour各种序列化字段 ,的高级解决方案

上文提到了UIState, ObjectRefactor等,还提到了远古的NGUI, KBEngine-UI等 这个算是比较新的解决方法吧,但是抽象出来,问题还是这些个问题 所以你就说做游戏是不是先要解决这些问题? 而不是高大上的UiImage,DoozyUI等 Mono管理引用基本用法 ① 添加Stateful Component …

【正点原子i.MX93开发板试用连载体验】录音小程序采集语料

本文最早发表于电子发烧友论坛&#xff1a;【新提醒】【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 接下来就是要尝试训练中文提示词。首先要进行语料采集&#xff0c;这是一…

【2-1:RPC设计】

RPC 1. 基础1.1 定义&特点1.2 具体实现框架1.3 应用场景2. RPC的关键技术点&一次调用rpc流程2.1 RPC流程流程两个网络模块如何连接的呢?其它特性RPC优势2.2 序列化技术序列化方式PRC如何选择序列化框架考虑因素2.3 应用层的通信协议-http2.3.1 基础概念大多数RPC大多自…

STM32Cubemx配置生成 Keil AC6支持代码

文章目录 一、前言二、AC 6配置2.1 ARM ComPiler 选择AC62.2 AC6 UTF-8的编译命令会报错 三、STM32Cubemx 配置3.1 找到stm32cubemx的模板位置3.2 替换文件内核文件3.3 修改 cmsis_os.c文件3.4 修改本地 四、编译对比 一、前言 使用keil ARM compiler V5的时候&#xff0c;编译…

M J更改图像生成方式的参数选项

一个完整的/imagine命令可能包含几个内容,例如图像 URL、图像权重、算法版本和其他开关。 /imagine参数应遵循以下顺序: /imagine prompt: https://example/tulip.jpg a field of tulips in the style of Mary Blair --no farms --iw .5 --ar 3:2 在这种情况下,“开关”是指…

如何压缩pdf文件大小,怎么压缩pdf文件大小

在数字化时代&#xff0c;pdf文件因其稳定的格式和跨平台兼容性&#xff0c;成为了工作与学习中不可或缺的一部分。然而&#xff0c;随着pdf文件内容的丰富&#xff0c;pdf文件的体积也随之增大&#xff0c;给传输和存储带来了不少挑战。本文将深入探讨如何高效压缩pdf文件大小…

【保姆级教程】CenterNet的目标检测、3D检测、关键点检测使用教程

一、代码下载 仓库地址:https://github.com/xingyizhou/CenterNet?tab=readme-ov-file 二、目标检测 2.1 下载预训练权重 下载预训练权重ctdet_coco_dla_2x.pth放到models文件夹下 下载链接:https://drive.google.com/file/d/18Q3fzzAsha_3Qid6mn4jcIFPeOGUaj1d/edit …

《昇思25天学习打卡营第19天|生成式-Pix2Pix实现图像转换》

学习内容&#xff1a;Pix2Pix实现图像转换 1.模型简介 Pix2Pix是基于条件生成对抗网络&#xff08;cGAN, Condition Generative Adversarial Networks &#xff09;实现的一种深度学习图像转换模型&#xff0c;该模型是由Phillip Isola等作者在2017年CVPR上提出的&#xff0c…

热题系列9

剑指 Offer 39. 数组中出现次数超过一半的数字 给一个长度为 n 的数组&#xff0c;数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次&#xff0c;超过数组长度的一半&am…

防火墙nat策略实验和多出口实验和智能选路实验

要求 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 8&#xff0c;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 9&#xff0c;多出口环境基于带宽比例进行选路&#xff0c…

GuLi商城-商品服务-API-品牌管理-OSS获取服务端签名(续)

如何进行服务端签名直传_对象存储(OSS)-阿里云帮助中心 gulimall-third-party服务的代码: package com.nanjing.gulimall.thirdparty.controller;import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.common.utils.BinaryUtil; impor…

电脑如何快速删除相同的文件?分享5款重复文件删除工具

您有没有发现最近电脑运行速度变慢了&#xff1f;启动时间变得更长&#xff0c;甚至完成简单任务也难以如常&#xff1f;这可能是因为重复文件堆积所致。我们发现&#xff0c;清理或移动这些重复的文件和文件夹可以产生惊人的效果。通过删除不必要的重复文件和垃圾文件&#xf…

【C++】:继承[下篇](友元静态成员菱形继承菱形虚拟继承)

目录 一&#xff0c;继承与友元二&#xff0c;继承与静态成员三&#xff0c;复杂的菱形继承及菱形虚拟继承四&#xff0c;继承的总结和反思 点击跳转上一篇文章&#xff1a; 【C】&#xff1a;继承(定义&&赋值兼容转换&&作用域&&派生类的默认成员函数…