【开懂C++】命名空间 函数重载 缺省参数

news2025/1/20 3:44:09

在这里插入图片描述

目录

  • 一.命名空间
    • 二.缺省参数
      • 三.函数重载

一.命名空间

在编写C语言代码时,当工程较大时,很容易产生变量命名冲突的情况——一般有两种冲突的情况
1.变量名与库中的函数名、关键字冲突2.工程模块化搭建时不同文件的命名冲突
而C++为了优化这一缺陷,提出了命名空间的概念。
命名空间使用的关键字是namespace,命名空间中可以定义变量/函数/类型/命名空间
如果同一工程下有相同名字的命名空间,他们会合并到一起。

#include <stdio.h>
#include <iostream>

namespace  _mer
{
	int a = 2;
}

int main()
{
	printf("%d", a);
	return 0;
}

上面的代码就是一个简单的命名空间的创建,那么我们怎么访问命名空间呢?一共有下面几种方法:

  • 明明空间的名称加上域作用限定符访问:
namespace  _mer
{
	int a = 2;
}

int main()
{
	printf("%d", _mer::a);
	return 0;
}
  • 使用关键字using将命名空间的某个成员引入:
namespace  _mer
{
	int a = 2;
}

using _mer::a;

int main()
{
	printf("%d", a);
	return 0;
}
  • 释放整个命名空间,使用using namespace可以将命名空间暴露到全局域中
namespace  _mer
{
	int a = 2;
}

using namespace _mer;

int main()
{
	printf("%d", a);
	return 0;
}

二.缺省参数

缺省参数就是在设计函数时可以将形参设定一个默认值。在调用函数时如果不传实参则直接使用缺省参数,否则使用实参。

int Prin(int a = 0)
{
	return a;
}


int main()
{
	cout << Prin() << endl;
	cout << Prin(10) << endl;

	return 0;
}

在这里插入图片描述

  • 缺省参数分类
    缺省参数分为全缺省参数(一个函数的所有形参都设默认值)和半缺省参数(一个函数并非所有参数都设置了默认值)
void Prin(int a = 0,int b=1,int c=2,int d=4)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
	cout << d << endl << endl;

}


int main()
{
	Prin();
	Prin(10);
	Prin(10,20);
	Prin(10, 20, 30);
	Prin(10, 20, 30, 40);
	return 0;
}

在这里插入图片描述
关于缺省参数还有一下几个注意点:

  1. 缺省值必须是常量或者全局变量
  2. 半缺省参数必须从右往左设置
  3. 缺省参数不能在函数声明和定义中同时出现,只需在声明中给出即可。

三.函数重载

函数重载也是C++中一个重要概念:
首先了解重载的条件:1.在同一作用域下,2.函数名称相同,3.函数参数类型不同,或者个数不同,或者顺序不同。常用来处理实现功能类似数据类型不同的问题:

void func(int a)
{
	cout << "(int a)的调用" << endl;
}
void func(double a)
{
	cout << "(double a)的调用" << endl;
}
void func(int a,double b)
{
	cout << "(int a,double b)的调用" << endl;
}
void func(double a, int b)
{
	cout << "(double a, int b)的调用" << endl;
}


int main()
{
	func(3.14,5);
	func(2);
	func(3.14);
	func(5,3.14);
	return 0;
}

注意事项:当函数重载遇上默认参数时可能会出错:

void func(int a, int b = 10)
{
	cout << "(int a)的调用" << endl;
}
void func(int a)
{
	cout << "(int a)的调用" << endl;
}
int main()
{
	func(10);
	return 0;
}

关于C++为什么支持函数重载的原理——名字修饰,想要了解可以去搜索一下。

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

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

相关文章

安装Ubuntu系统后的实用工具配置指南

1. 修改软件源 Ubuntu 默认的软件源是境外的&#xff0c;速度上会有些问题&#xff0c;我们可以在Software & Updates(软件和更新)中选择国内的镜像。 一般我们选择清华源或者阿里云源。 2. 安装chorme浏览器 在ubuntu下我比较习惯用火狐浏览器和谷歌浏览器。 谷歌浏览…

vue 自定义指令directive的使用场景

1. 一个指令定义对象可以提供如下几个钩子函数(均为可选) bind:只调用一次&#xff0c;指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。inserted:被绑定元素插入父节点时调用(仅保证父节点存在&#xff0c;但不一定已被插入文档中)。update:只要当前元素不被…

Leetcode.1971 寻找图中是否存在路径

题目链接 Leetcode.1971 寻找图中是否存在路径 easy 题目描述 有一个具有 n 个顶点的 双向 图&#xff0c;其中每个顶点标记从 0 到 n - 1&#xff08;包含 0 和 n - 1&#xff09;。图中的边用一个二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi]表示顶点 ui和顶…

关于maxwell

这里写目录标题什么是Maxwell如何使用MaxwellMaxwell是一个mysql二进制binlog日志分析工具&#xff0c;Java语言编写&#xff0c;功能十分强大&#xff0c;可以将日志转换成json并发送到kafka&#xff0c;redis&#xff0c;rabbitmq等中间组件&#xff0c;因为最近在理解怎样在…

QtSqlite加密--QtCipherSqlitePlugin的使用

文章目录QtSqlite加密第一步&#xff1a;环境准备第二步&#xff1a;连接数据库第三步&#xff1a;数据库操作第四步&#xff1a;使用新的可视化工具查看数据库数据QtSqlite加密 上次说了QxOrm的数据库连接、映射和基础的增删改查&#xff0c;但是我们在使用数据库的时候并不希…

期刊论文图片代码复现【由图片还原代码】(OriginMatlab)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…

【数据结构】图解八大排序(上)

文章目录一、排序简介二、直接插入排序三、希尔排序四、直接选择排序五、堆排序六、冒泡排序七、冒泡排序与直接插入排序效率对比一、排序简介 生活中&#xff0c;我们经常能看到排序的应用。例如&#xff0c;我们在网购商品的时候&#xff0c;经常按销量从高到低排序。 那么这…

Linux服务器怎么分区

Linux服务器怎么分区 我是艾西&#xff0c;linux系统除了从业某个行业经常要用到的程序员比较熟悉&#xff0c;对于小白或只会用Windows系统的小伙伴还是会比较难上手的。今天艾西简单的跟大家聊聊linux系统怎么分区&#xff0c;让身为小白的你也能一眼看懂直接上手操作感受程序…

【数据结构】用Java实现七大排序算法

目录 &#x1f337;1. 排序的概念及引用 1.1 排序的概念 1.2 衡量指标 1.2 十个排序算法 1.3 十个排序性能对比 &#x1f337;2. 冒泡排序 2.1 算法描述 2.2 动图 ⭐️代码优化 &#x1f337;3. 选择排序 3.1 算法描述 3.2 动图 3.3 代码 &#x1f337;4. 插入排序 4.1 算法描述…

(大数据开发随笔9)Hadoop 3.3.x分布式环境部署——全分布式模式

索引完全分布式模式守护进程布局集群搭建准备总纲配置文件格式化集群启动集群集群控制命令集群启停进程查看启动日志查看集群常见问题案例演示&#xff1a;WordCount完全分布式模式 分布式文件系统中&#xff0c;HDFS相关的守护进程也分布在不同的机器上&#xff0c;如&#x…

cgroups是linux内核中限制、记录、隔离进程组(process groups)所使用的物理资源的机制

容器虚拟化 可以实现应用程序的隔离 直接使用物理机的操作系统可以快速响应用户请求 不占用部署时间 占用少量磁盘空间 缺点∶学习成本增加、操作控制麻烦、网络控制与主机虚拟化有所区别、服务治理难。 微服务架构师需要会多门编程语言&#xff0c;才能治理各种服务 三种…

web路径专题+会话技术

目录自定义快捷键1. 工程路径问题及解决方案1.1 相对路径1.2 相对路径缺点1.3 base标签1.4 作业11.5 作业21.6注意细节1.7 重定向作业1.8 web工程路径优化2. Cookie技术2.1 Cookie简单示意图2.2 Cookie常用方法2.2 Cookie创建2.3 Cookie读取2.3.1 JSESSIONID2.3.2 读取指定Cook…

Linux文件目录操作命令

目录 Linux常用的基础命令 使用技巧 1. ls命令&#xff1a;查看当前目录所有内容 ls 命令的多种使用方法&#xff1a; 注&#xff1a;假如执行乱码&#xff0c;则执行以下两步的代码&#xff1a; 2. cd命令&#xff1a;切换当前工作目录&#xff0c;即进入指定目录 3. …

网络-IP地址(嵌入式学习)

IP地址基本概念IPv4 五类&#xff1a;A B C D E特殊地址子网掩码子网号概念IPv6优势举个栗子基本概念 IP地址是Internet中主机的标识 IP地址&#xff08;Internet Protocol Address 互联网国际地址&#xff09;是一种在Internet上的给主机编址的方式&#xff0c;它主要是为互…

Java Web 开发技术的演进:从 Servlet、Spring MVC 到 WebFlux 及其竞品分析

前言 随着互联网技术的快速发展&#xff0c;Web 应用程序在处理海量用户访问和大数据时面临着巨大的挑战。在这个过程中&#xff0c;Java Web 开发技术经历了从 Servlet 到 Spring MVC 再到 WebFlux 的演变。在这篇文章中&#xff0c;我们将探讨这三个技术的发展历程、痛点及解…

Go的IO -- Go语言设计与实现

Go合IO的不解之缘 协程是Go的很大的一个优势。Go天然支持高并发&#xff0c;那么我们来研究一下这个高并发的秘诀在哪里&#xff1f; 执行体调度得当。CPU 不停的在不同的执行体&#xff08; Goroutine &#xff09;之间反复横跳&#xff01;CPU 一直在装填和运行不同执行体的…

数字化坚鹏:金融数据治理、数据安全政策解读及银行数字化转型

金融数据治理、数据安全政策解读及银行数字化转型课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不知道如何准确理解金融数据治理及数据安全相关政策 不清楚金融数据治理及数据安全相关政策对银行有什么影响&#xff1f; 不清楚如何进行银行数字化转型&#xff1f…

Azure DevOps Pipelines

Azure DevOps主要通过管理代码、管理服务器、管理发布的管道来实现一体化解决方案 发布流程&#xff1a; 1、代码上传Repos仓储 略 2、DevOps连接并管理发布服务器 2.1、Deployment Groups配置 2.2、服务器执行连接指令 2.3、服务器状态查看 3、创建 Pipline(构建代码) 3.1…

前端中font的使用

知识点&#xff1a; 运行截图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name&…

【RabbitMQ】SpringBoot整合RabbitMQ、实现RabbitMQ五大工作模式(万字长文)

目录 一、准备 1、创建SpringBoot项目 2、添加配置信息 3、创建配置类 二、RabbitMQ的配置类里创建队列 三、RabbitMQ的配置类里创建交换机及绑定队列 四、SpringBoot整合RabbitMQ入门案例 1、生产者 2、消费者 四、SpringBoot里实现RabbitMQ五大工作模式 1、简单模式…