C++入门语法———命名空间,缺省参数,重载函数

文章目录

  • 一.命名空间
    • 1.存在意义
    • 2.语法使用
      • 1.定义命名空间
      • 2.使用命名空间的三种方式
  • 二.缺省参数
    • 1.全缺省参数
    • 2.半缺省参数
  • 三.重载函数
    • 1.定义
    • 2.重载原理———名字修饰

一.命名空间

1.存在意义

C++命名空间的主要意义是为了避免命名冲突,尤其是在大型项目中可能存在大量的全局变量、函数和类,这些都有可能会出现命名冲突。通过将这些实体放置在不同的命名空间中,可以有效地避免这种冲突。
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,

2.语法使用

1.定义命名空间

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

namespace qiangsir
{int a = 10;int b = 20;int Add(int x, int y){return x + y;}
}

在主函数中使用命名空间的成员,是无法直接使用的,需要加上所命名的空间。

2.使用命名空间的三种方式

  • 通过使用作用域限定符::对所使用的内容一次手动添加查找域
int main()
{printf("%d\n",qiangsir::a);printf("%d\n",qiangsir::b);int c=qiangsir::Add(qiangsir::a, qiangsir::b);return 0;
}

在这里插入图片描述

  • 使用using将命名空间中某个成员引入
    如果频繁使用作用域中某个成员则可提前声明,防止每次添加
using qiangsir::Add;

当每次需要调用加法函数时,可以直接找到。

  • 使用using namespace 命名空间名称 引入
    这个使用相当于将自己的所有成员展开,使得每个地方都能找到。
using namespace qiangsir;

在实战过程中不建议这样使用,因为在大型项目合作中容易造成成员冲突,只有在平常练习和竞赛中有使用需求。

二.缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

在使用缺省参数时,需要注意以下几点:1.缺省参数通常应该放在参数列表的末尾,以便在调用函数时可以省略它们。
2.在调用函数时,可以通过传递参数的方式来覆盖默认值。
3.缺省参数的值通常应该是不可变的对象,比如数字、字符串或None,而不是可变对
象,比如列表或字典。缺省值必须是常量或者全局变量

1.全缺省参数

 int add(int x=3, int y=4)
{return x + y;
}

这里默认参数x=3,y=4
如果传了有效参数,则会覆盖默认值,否则使用默认值计算

int main()
{cout << add(1, 2) << endl;//有参数cout << add() << endl;//无参数return 0;
}

在这里插入图片描述

2.半缺省参数

注意的是半缺省参数,从右至左进行缺省,不可从左至右缺省
在这里插入图片描述
错误写法
在这里插入图片描述

三.重载函数

1.定义

函数重载是指可以定义多个具有相同名称但参数列表不同的函数。这意味着在同一个作用域内,可以有多个同名函数,只要它们的参数列表不同即可。在调用函数时,编译器会根据传入的参数类型和数量来确定调用哪个重载函数。

函数重载的主要特点包括:
1.函数名称相同,但参数列表不同。
2.参数列表不同可以通过参数的个数、类型或顺序来区分。
3.返回类型不同的函数不能作为重载函数,因为重载函数的区分标准是参数列表。

第三点极为重要,如图错误示范:
在这里插入图片描述
c++在这点上改进了c语言中无法函数同名的问题

2.重载原理———名字修饰

在c语言中函数调用时,需要以函数名找函数地址调用,所以同名函数无法区分。

所以语言设计者在c++中引入函数名修饰规则,在命名时引入了参数。

在c/c++中有这么几个编译步骤:
1.预处理
2.编译
3.汇编
4.链接
在链接过程中不同系统编译器下的名字修饰不同,这里以linux的命名规则进行展示:

[qiangsir@iZf8zbc41kduw4qa52iammZ ~]$ cat test.cpp
#include<iostream>
using namespace std;int Add(int a,int b)
{return a+b;
}double Add(double a,double b)
{return a+b;
}int main()
{
cout<<Add(1,2)<<endl;
cout<<Add(1.2,2.3)<<endl;return 0;
}

在这里插入图片描述
在汇编层面,函数名已经经过修饰,如图,红色框框为Add的不同重载:
在这里插入图片描述
其中-Z为默认开头,3为字节数,ii为两个参数int的简称,dd为两个参数double的简称。
本期文章分享至此结束,感谢收看!
在这里插入图片描述

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

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

相关文章

51单片机电子密码锁Proteus仿真+程序+视频+报告

目录 视频 设计分析 系统结构 仿真图 资料内容 资料下载地址&#xff1a;51单片机电子密码锁Proteus仿真程序视频报告 视频 单片机电子密码锁Proteus仿真程序视频 设计分析 (1)能够从键盘中输入密码&#xff0c;并相应地在显示器上显示‘*’&#xff1b; (2)能够判断密码…

JAVA漏洞简单总结

第一部分&#xff1a;Javaweb常见安全及代码漏洞 以开源项目webgoat-server-8.1.0为例&#xff0c;可以在GitHub上看到&#xff0c;直接可以下载jar包&#xff0c;在本地准备jdk环境&#xff0c;使用以下命令进行启动&#xff1a; java -jar webgoat-server-8.1.0.jar --server…

跟着我学Python进阶篇:04. 错误和异常

往期文章 跟着我学Python基础篇&#xff1a;01.初露端倪 跟着我学Python基础篇&#xff1a;02.数字与字符串编程 跟着我学Python基础篇&#xff1a;03.选择结构 跟着我学Python基础篇&#xff1a;04.循环 跟着我学Python基础篇&#xff1a;05.函数 跟着我学Python基础篇&#…

CSS之高度塌陷和外边距塌陷

目录 1.高度塌陷&#xff08;原因&#xff0c;如何解决&#xff09; 【概念介绍】 【解决办法】 【概念介绍-BFC】 【拓展-BFC的触发条件】 2.外边距塌陷 &#xff08;原因&#xff0c;如何解决&#xff09; 【概念介绍】 【两种情况】 1.相邻块元素 2.嵌套块元素 【…

PPP协议原理介绍+报文分析+配置指导-RFC1661

个人认为&#xff0c;理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息&#xff0c;更加便于理解协议。 因此本文将在PPP协议报文的基础上进行介绍。 关于PPP协议基本原理&#xff0c;可参考RFC1661-The Point-to-Point Protocol (PPP)。 关于P…

编译原理2.3习题 语法制导分析[C++]

图源&#xff1a;文心一言 编译原理习题整理~&#x1f95d;&#x1f95d; 作为初学者的我&#xff0c;这些习题主要用于自我巩固。由于是自学&#xff0c;答案难免有误&#xff0c;非常欢迎各位小伙伴指正与讨论&#xff01;&#x1f44f;&#x1f4a1; 第1版&#xff1a;自…

Spring扩展点在微服务应用(待完善)

ApplicationListener扩展 nacos注册服务&#xff0c; 监听容器发布事件 # 容器发布事件 AbstractAutoServiceRegistration#onApplicationEvent # 接收事件吗&#xff0c;注册服务到nacos NacosServiceRegistry#register Lifecycle扩展 #订阅服务实例更改的事件 NamingService#…

go语言数组和切片

1. 数组Array Golang Array和以往认知的数组有很大不同。 1. 数组&#xff1a;是同一种数据类型的固定长度的序列。2. 数组定义&#xff1a;var a [len]int&#xff0c;比如&#xff1a;var a [5]int&#xff0c;数组长度必须是常量&#xff0c;且是类型的组成部分。一旦定义&…

设计模式: 装饰模式

文章目录 一、什么是装饰模式二、装饰模式的结构三、使用场景案例分析 一、什么是装饰模式 在不改变对象原有行为的基础上&#xff0c;动态的来为该对象绑定新的行为。 二、装饰模式的结构 装饰模式结构中主要包含如下角色&#xff1a; Component&#xff08;抽象部件&…

操作系统-虚拟机(传统计算机 虚拟机 两类VMM对比 指令等级 特权与敏感)

文章目录 传统计算机虚拟机VMM的对比支持虚拟化的CPU通常分更多指令等级&#xff08;特权 敏感&#xff09; 传统计算机 传统物理机只有一个操作系统 两个进程在一个操作系统上运行会存在一些隐患&#xff08;相互影响 争夺资源等&#xff09; 解决方法&#xff1a;如果各个进…

Docker部署

Docker简介 Docker是一个开源的容器引擎&#xff0c;它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离&#xff0c;并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序&#xff0c;并可以缩短从编写到部署运行代码的周期。 &a…

HCIP 交换

拓扑图&IP划分如下&#xff1a; 第一步&#xff0c;配制VLAN LSW1&#xff0c;LSW2&LSW3同理 检测 LSW1 LSW2 测试