C++命名空间,函数重载

news2024/11/20 2:31:59

一、C++命名空间

使用过C++的人都知道在引入<iostream>头文件后需要加上这样一行代码

using namespace std;

但是对于初学者来说不仔细研究一下可能都不知道为什么需要这样一行代码,接下来将对其进行解释,引入命名空间的概念

C++在C的基础上增加了命名空间这一概念来避免命名冲突的问题,也就是说可以在不同的命名空间使用相同名称的函数或者变量。命名空间划分了作用域,作用域不同即便名称相同也不会冲突

namespace space1
{
	int a=1;
}
namespace space2
{
	int a=2;
}

 两个命名空间都有a变量,但是不会冲突

如果要拿到这两个变量,我们需要用到 ::(两个冒号)这个符号 ,其名称为作用域限定符,可以指定特定的作用域,命名空间的内容默认是对外不可见的,除非我们进行处理(下面会一一列出,这里用::就是一种方法)

int main()
{
	cout << space1::a <<' ' << space2::a << endl;
	return 0;
}

 运行结果:

 如果定义的命名空间名称相同呢?

答案是会兼并,不会冲突。

namespace space1
{
	int a=1;
}
namespace space1
{
	int a=2;
}

这么写代码会有问题,两个a变量都属于space1这个命名空间,此时同一作用域出现了同名变量,编译器报错

接下来谈谈命名空间的展开,搞清楚这个就理解开头的问题了

<iostream>这个头文件里包含了一个名为std的命名空间,我们用到的cout、cin、endl等都定义在这个命名空间里,默认是不可见的,除非我们进行处理(上面提及过,现进行解释)

 方法一:

指定作用域,让编译器去那里找,不指定的话编译器默认不进去找

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

方法二:

部分展开

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

这么做在命名空间外的cout和endl都默认是std里的,当然其他的命名空间内可以有其他的cout和endl,但是不能进行部分展开,否则还会和std的cout和endl冲突

方法三:

全部展开

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

std命名空间内所有东西都对外可见,这也就是开头提出的问题

二、函数重载

函数重载是什么?

同样的函数名,传入参数不同,产生结果不同,下面具体说明

#include<iostream>
using namespace std;
void func(int a)
{
	cout << "int" << endl;
}
void func(double a)
{
	cout << "double" << endl;
}
int main()
{
	int a = 0;
	func(a);
	double b = 0;
	func(b);
	return 0;
}

对于func函数来说,传入double类型的变量,输出"double", 传入int类型的变量,输出"int"

运行结果:

发生函数重载的条件:
1.作用域相同

2.函数名相同

3.参数不同

注意:返回值类型不同不能构成函数重载,也就是说,仅仅只是返回值类型不同,是不会构成函数重载的

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言--每日五道选择题--Day12

第一题 1、如下程序的功能是&#xff08; &#xff09; #include <stdio.h> int main() {char ch[80] "123abcdEFG*&";int j;puts(ch);for(j 0; ch[j] ! \0; j){if(ch[j] > A && ch[j] < Z){ch[j] ch[j] e - E;}}puts(ch);return 0; } A…

Spring-boot Mybatis-plus 实战应用

文章目录 前言一、springBoot 集成mybatis-plus1.1 maven 引入依赖&#xff1a;1.2 配置数据源&#xff1a;&#xff1a; 二、使用:2.1 mysql 打印执行的sql 设置&#xff1a;2.2 分页查询&#xff1a;2.3 条件构造器&#xff1a;2.3.1 QueryWrapper 查询&#xff1a;2.3.2 Upd…

【Android Studio调试报错】setContentView(R.layout.activity_main);

报错如下&#xff1a; 解决方法&#xff1a; 1、把参数删除到只剩 .&#xff0c;用自动补齐的方式来查看当前文件的位置是不是&#xff0c;当前左侧工程中layout 所在的位置。在的话它会在自动补齐列表有选项。否则我们选中第一个。 2、选中之后是这样的 然后问题解决&#xf…

杜卡迪Panigale V4 SP2 916限量版,共计500台,这名字真长....

既然是916限量款就不得不提杜卡迪916了&#xff0c;这台车被誉为最美杜卡迪&#xff0c;杜卡迪的仿赛很多设计都能从这台916上找到&#xff0c;这台车是1994年发布&#xff0c;截止目前23年&#xff0c;而V4 SP2 916限量款明年正式发售&#xff0c;所以也可以称为30周年916纪念…

详解[ZJCTF 2019]NiZhuanSiWei 1(PHP两种伪协议、PHP反序列化漏洞、PHP强比较)还有那道题有这么经典?

题目环境&#xff1a; <?php $text $_GET["text"]; $file $_GET["file"]; $password $_GET["password"]; if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){echo "<br><h1>&…

笔记51:循环神经网络入门

本地笔记地址&#xff1a;D:\work_file\DeepLearning_Learning\03_个人笔记\3.循环神经网络\循环神经网络 a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a

视觉分词器统一图文信息,快手提出基座模型 LaVIT 刷榜多模态任务

你是否想过&#xff0c;有朝一日能够仅输入寥寥数语或图片&#xff0c;就可以一键检索最为匹配的短视频内容。不是凭借视频标签、也不是依靠标题字幕&#xff0c;而是大模型真正理解了视频内容。近期&#xff0c;来自快手的新研究利用视觉分词器统一图文信息&#xff0c;LaVIT …

Project Office X Pro 是一款功能齐全的项目管理应用程序

Project Office X Pro是一款适用于Mac的专业项目管理软件。它提供了全面的项目管理工具和功能&#xff0c;帮助用户有效地规划、执行和监控项目。 特征&#xff1a; 甘特图让您一目了然地监控您的整个计划。每项任务都按日、周、月或年以图形方式显示在可视时间线上。可视化视…

(五)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB

一、七种算法&#xff08;DBO、LO、SWO、COA、LSO、KOA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…

安装virt-manger虚拟机管理器

环境&#xff1a; redhat7:192.168.1.130 安装步骤&#xff1a; 安装qemu-kvm yum install -y qemu-kvm安装libvirt yum install -y libvirt重启libvirt systemctl restart libvirtd查看libvirt的版本信息 virsh version安装virt-manager yum install -y virt-manager检验…

第06章 面向对象编程(基础)

一 面向对象编程概述 1.1 程序设计的思路 面向对象&#xff0c;是软件开发中的一类编程风格、开发范式。除了面向对象&#xff0c;还有面向过程、指令式编程和函数式编程。在所有的编程范式中&#xff0c;我们接触最多的还是面向过程和面向对象两种。 类比&#xff1a;史书类…

阶段七-Day02-SpringMVC

一、Restful请求格式 1. 介绍 Rest(Representational State Transfer&#xff1a;表现层状态转移)是一种软件架构风格&#xff0c;其核心是面向资源的一种设计。何为面向资源&#xff0c;意思是网络上的所有事物都可以抽象为资源&#xff0c;而每个资源都有唯一的资源标识&…

【数学建模】(1)层次分析法(AHP)

一.层次分析法的定义 层次分析法&#xff0c;简称AHP&#xff0c;是指将与决策总是有关的元素分解成目标、准则、方案等层次&#xff0c;在此基础之上进行定性和定量分析的决策方法&#xff0c;是一种层次权重决策分析方法。 层次分析法是一种主观赋值评价方法…

淘宝/京东/拼多多三方接口调用设计方案

在为第三方系统提供接口的时候&#xff0c;肯定要考虑接口数据的安全问题&#xff0c;比如数据是否被篡改&#xff0c;数据是否已经过时&#xff0c;数据是否可以重复提交等问题 在设计三方接口调用的方案时&#xff0c;需要考虑到安全性和可用性。以下是一种设计方案的概述&a…

盒子模型-详解

一、盒子模型组成 所谓盒子模型&#xff1a;就是把HTML页面中的布局元素看作是一个矩形的盒子也就是一个盛装内容的容器。css盒子模型本质是一个盒子&#xff0c;封装周围的HTML元素&#xff0c;包括边框、外边距、内边距和实际内容。 margin:外边距 用于控制盒子与盒子之间的…

【ROS导航Navigation】一 | 概述

目录 致谢&#xff1a;ROS赵虚左老师 一、【概述】二狗子找大水法 Navigation全图 二、【SLAM】即时定位与地图构建 三、【AMCL】自适应蒙特卡洛定位 四、【Move_base】路径规划 五、【cmd_vel】运动控制 六、环境感知 致谢&#xff1a;ROS赵虚左老师 Introduction A…

多行业用户齐聚,2023 IoTDB 用户大会详细议程更新!

上周我们官宣了 2023 IoTDB 用户大会举办的消息&#xff0c;获得了多方小伙伴们积极的响应&#xff0c;作为第一次线下大会&#xff0c;我们已经开始期待与大家线下相见&#xff01; 为了回应大家对于大会内容的期待&#xff0c;我们火速把更加详细的议程“搬运”来啦~ 20 位大…

【亚马逊云科技】使用Amazon Lightsail快速建站

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

Webpack Bundle Analyzer包分析器

当我们需要分析打包文件dist里哪些资源可以进一步优化时&#xff0c;就可以使用包分析器插件webpack-bundle-analyzer。NPM上的介绍是使用交互式可缩放树图可视化 webpack 输出文件的大小。 我的是vue2项目。 1、webpack-bundle-analyzer插件的安装 $ npm install --save-dev…

Python数据容器(集合)

集合 1.集合的定义2.集合中常用操作4.常用功能总结5.集合的特点6.练习 思考&#xff1f; 我们目前接触到了列表、元组、字符串三个数据容器了。基本满足大多数的使用场景。为何要学新的集合类型呢&#xff1f; 通过特性分析 列表可以修改、支持重复元素且有序元组、字符串不可修…