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.mzph.cn/news/644963.shtml

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

相关文章

“高级SPA项目构建与路由实现“

目录 引言1. SPA项目构建1.1 安装vue-cli,webpack1.2 创建 Vue.js项目1.3 “一问一答”模式1.4 启动项目 2. SPA项目完成路由3. 基于SPA项目完成嵌套路由总结 引言 在现代Web开发中&#xff0c;单页应用&#xff08;SPA&#xff09;已经成为一种流行的开发模式。SPA通过在前端…

(BUUCTF)0ctf_2018_heapstorm2

文章目录 前置知识整体思路house of storm如何进行一次house of stormhouse of storm原理house of storm具体流程 chunk shrink exp 前置知识 unsortedbin attacklargebin attackoff by null构造chunk shrink 整体思路 这道题即是house of storm。除了house of storm&#x…

优优嗨聚:美团代运营服务,为商家赋能,打造流量转化的秘密武器

随着互联网的飞速发展&#xff0c;人们越来越依赖线上平台进行消费。作为国内领先的电商平台之一&#xff0c;美团吸引了众多商家入驻。然而&#xff0c;如何在竞争激烈的美团平台上脱颖而出&#xff0c;成为了商家们面临的一大挑战。此时&#xff0c;美团代运营服务应运而生&a…

html 粒子效果文字特效

有两个代码如下&#xff1a; index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head>…

HTML5和CSS3的新特性

HTML5的新特性主要是针对于以前的不足&#xff0c;增加了一些新的标签、新的表单和新的表单属性等 1&#xff0c;HTML5新增的语义化标签 <header> 头部标签 <nav> 导航标签 <article> …

《WebKit 技术内幕》学习之九(4): JavaScript引擎

4 实践——高效的JavaScript代码 4.1 编程方式 关于如何使用JavaScript语言来编写高效的代码&#xff0c;有很多铺天盖地的经验分享&#xff0c;以及很多特别好的建议&#xff0c;读者可以搜索相关的词条&#xff0c;就能获得一些你可能需要的结果。同时&#xff0c;本节希望…

记录centos安装nginx过程和问题

今天在centos上安装了nginx&#xff0c;遇到了些问题&#xff0c;记录一下。 使用yum直接安装的话安装的版本是1.20.1&#xff0c;使用源码包安装可以装到1.25.0&#xff08;最新稳定版&#xff09;。很有意思的一点是两种安装方法下安装的路径是不同的&#xff0c;且源码安装…

第一讲:入门知识笔记

python 变量无类型&#xff0c;但值里面有类型。 动态类型语言&#xff08;python&javascript&#xff09;Subtraction num 10 print(num / 2, num // 3, num // -3) # 5.0, 3, -4 向下取整 int(num / 3) # 不用向下取整的办法reverse 3-digit number def res(num):digi…

Java 面向对象案例 03(黑马)

代码&#xff1a; public class phoneTest {public static void main(String[] args) {phone [] arr new phone[3];phone p1 new phone("华为",6999,"白色");phone p2 new phone("vivo",4999,"蓝色");phone p3 new phone("苹…

手把手教你用深度学习做物体检测(一): 快速感受物体检测的酷炫

我们先来看看什么是物体检测&#xff0c;见下图&#xff1a; 如上图所示&#xff0c; 物体检测就是需要检测出图像中有哪些目标物体&#xff0c;并且框出其在图像中的位置。 本篇文章&#xff0c;我将会介绍如何利用训练好的物体检测模型来快速实现上图的效果&#xff0c;这里…

Pyside6中QTableWidget使用

目录 一&#xff1a;介绍&#xff1a; 二&#xff1a;演示 一&#xff1a;介绍&#xff1a; 在 PySide6 中&#xff0c;QTableWidget 是一个用于展示和编辑表格数据的控件。它提供了在窗口中创建和显示表格的功能&#xff0c;并允许用户通过单元格来编辑数据。 要使用 QTabl…

什么是功能测试?原因、方式和类型

功能测试是软件开发和部署之间的检查点。每次点击和每次交互都需要严格的功能测试过程。这不仅仅是为了识别错误&#xff0c;更是为了确保无缝、以用户为中心的体验。完善您的方法并提供功能强大、令人印象深刻且吸引人的软件所需的见解。 什么是功能测试 首先&#xff0c;功能…

多线程批量同步数据到ES

需求背景&#xff1a;新增了ES&#xff0c;现在要讲数据库某张表的数据同步到ES中&#xff0c;百万级的数据量一次性读取同步肯定不行&#xff0c;所以可以用多线程同步执行同步数据。 1.线程池配置类 Configuration public class ThreadPoolConfig {/*** 核心线程池大小*/pr…

C语言学习(5)—— 数组

一、一维数组 1. 基本数据类型的数组 数组的定义&#xff1a;数据类型 数组名 [数组大小]; 数组名就代表该数组的首地址&#xff0c;即a[0]的地址 使用下标来访问数组元素 数组是多个相同类型数据的组合&#xff0c;一个数组一旦定义了&#xff0c;其长度是固定的&…

开源模型应用落地-业务整合篇(四)

一、前言 通过学习第三篇文章,我们已经成功地建立了IM与AI服务之间的数据链路。然而,我们目前面临一个紧迫需要解决的安全性问题,即非法用户可能会通过获取WebSocket的连接信息,顺利地连接到我们的服务。这不仅占用了大量的无效连接和资源,还对业务数据带来了潜在的风险。…

build.gradle标签详解

一、简介 Gradle是一个开源的构建自动化工具&#xff0c;主要用于Java、Groovy和其他JVM语言的项目。它使用一个基于Groovy或Kotlin的特定领域语言(DSL)来声明项目设置&#xff0c;从而摒弃了基于XML的繁琐配置。build.gradle是Gradle项目的核心配置文件&#xff0c;它定义了项…

系统架构设计师教程(十五)面向服务架构设计理论与实践

面向服务架构设计理论与实 15.1 SOA的相关概念15.1.1 SOA的定义15.1.2 业务流程与BPEL15.2 SOA的发展历史15.2.1 SOA的发展历史15.2.2 国内SOA的发展现状与国外对比15.2.3 SOA的微服务化发展15.3 SOA的参考架构15.4 SOA主要协议和规范15.4.1 UDDI协议15.4.2 WSDL规范15.4.3 SOA…

清理Docker环境

清理Docker环境&#xff1a;有时&#xff0c;Docker环境可能会出现一些问题&#xff0c;导致网络连接故障。您可以尝试清理Docker环境并重新启动。可以尝试运行以下命令&#xff1a; 复制 docker-compose down docker system prune -a docker-compose up docker-compose up 和…

Windows 下 TFTP 服务搭建及 U-Boot 中使用 tftp 命令实现文件下载

目录 Tftpd32/64文件下载更多内容 TFTP&#xff08;Trivial File Transfer Protocol&#xff0c;简单文件传输协议&#xff09;是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务&#xff0c;端口号为 6…