C++入门基础:命名空间,缺省参数,函数重载,输入输出

news2025/4/20 20:29:08

命名空间:

C++语言是基于C语言的,融入了面向对象编程思想,有了很多有用的库,所以接下来我们将学习C++如何优化C语言的不足的。

在C/C++语言实践中,在全局作用域中变量,函数,类会有很多,这就导致总会有名称冲突,这时候C++就有命名空间的目的是对标识符的名称本地化(作用在一个新的作用域里),避免名称冲突或名字冲突。

命名空间的定义:用namespace关键字

namespace T
{
    int j = 10;

    int add(int i, int b)
    {
        return i + b;
    }

    struct STR
    {
        char a;
    };
}

一个命名空间就定义了一个新的作用域 。

命名空间的使用:

namespace T
{
    int j = 10;

    int add(int i, int b)
    {
        return i + b;
    }

    struct STR
    {
        char a;
    };
}

using namespace T;//将整个命名空间的内容引入展开

using T::j;//使用using将指定命名空间的内容展开

int main()
{
    int j = 20;
    cout << j << endl;
    cout << T::j << endl;//指定作用域去找,:: 是作用域限定符
}

 上述需要注意的是使用 using 将命名空间的内容展开之后,如果有同名变量存在在同一作用域中的话就会报错,所以一般为了安全我们一般会使用指定作用域限定符。原因:编译器在编译时寻找原则为:1.局部2.全局 3.如果指定了直接去指定域。如果说展开了命名空间,则还是遵循 1局部 2全局 3.指定就去指定找。

上述就是将命名空间的 j 展开了但是还是会先找局部作用域的。

上述就是指定的找。

有时候C语言中变量名字会和库里面函数的名字冲突无法解决,C++就可以用命名空间解决,也可以解决不同程序员之间命名冲突的问题。

C++输入和输出:

#include<iostream>
using namespace std;

int main()
{
    int rand = 20;
    cout << rand << endl;
    cin >> rand ;
    cout << rand << endl;
}

如图上述的代码,C++ 中一般的输入和输出 使用 cin 和 cout 包含在 #include<iostream> 头文件中,使用命名空间std。当然也可以用C语言中的,因为C++ 兼容C

这里有C++符号的复用(也叫运算符重载),<<  : 1.左移操作符 2.流插入。 >>  : 1.右移 2. 流提取。在C++的输入输出中比C更方便,因为会自动识别变量类型。(endl 是特殊符号表示换行相当于 “/n”)。

缺省参数:

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

//全缺省参数
void Func(int a = 10,int b = 2, int c = 3)
{
	cout << a + b + c << endl;
}

int main()
{
	Func();
}

使用了缺省参数。

还有半缺省参数:

注意:1.半缺省参数只能从右往左依次来给,不能有间隔。2.缺省参数不能同时在声明和定义中同时存在。3.缺省值必须是常量活着全局变量。4. C语言不支持

函数重载:

C++允许在同一个作用域中声明几个功能类似的同名函数,这些函数的区别为他们的形参列表(参数个数,参数类型,或者类型顺序)不同。常用来解决功能类似,类型不同的函数问题。

//参数类型不同
int add(int a, int b)
{
	cout << "int add(int a, int b) :" << a + b << endl;
	return 0;
}
double add(double a, double b)
{
	cout << "double add(double a, double b) :" << a + b << endl;
	return 0;
}

//参数个数不同
void F(int i, int j)
{
	cout << "void F(int i, int j) :" << i << " " << j << endl;
}
void F(int i)
{
	cout << "void F(int i) :" << i << endl;
}

//参数类型顺序不同
void F(int a, char b)
{
	cout << "void F(int a, char b) :" << a << " " << b << endl;
}
void F(char a, int b)
{
	cout << "void F(char a, int b) :" << a << " " << b << endl;
}
int main()
{
	//参数类型不同
	add(10,20);
	add(1.1, 2.2);

	//参数个数不同
	F(10, 20);
	F(10);

	//参数类型顺序不同
	F(10, 'I');
	F('I', 10);
}

 

这就是函数重载。很方便。

注意:返回值不同不能构成函数重载,编译器无法识别。

为什么可以函数重载------原理:名字修饰

首先我们了解到一个程序走起来,需要四个阶段:1.预处理 2.编译 3.汇编 4.链接

在实践中,声明和定义一般是分开的,编译器编译时会拿到函数的声明这时没有定义就没有函数的地址,但是会先过掉,因为有声明在。之后就是汇编形成符号表。

最后链接时,看到调用了某个函数但是没有函数的地址,就会在其他文件的符号表中去找函数的地址,那链接器根据什么去找呢?

在C语言中:链接时,直接用函数名去找地址,如果有同名函数,编译器区分不开,就会报错。

C++支持函数重载:会有一套函数名字修饰规则,在函数名字中引入参数类型之类的填入符号表,这样子编译器寻找时就可以精确找到对应函数地址

所以只要参数不同,修饰的名字就不同,就支持了重载。

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

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

相关文章

tomcat 的安装与启动

文章目录 tomcat 服务器安装启动本地Tomcat服务器 tomcat 服务器安装 https://tomcat.apache.org/下载 Tomcat 10.0.X 启动本地Tomcat服务器 进入 Tomcat 的 bin

算法-堆+单调栈

堆 首先堆在我们的Java中我们的是一个优先队列类 PriorityQueue 然后我们要弄最大堆和最小堆 最大堆&#xff1a; PriorityQueue<Integer> pq new PriorityQueue<Integer>((a, b) -> b - a); 最小堆&#xff1a; PriorityQueue<Integer> pq new P…

物联网平台管理系统

物联网平台管理系统概述 物联网平台管理系统是物联网架构中的核心枢纽&#xff0c;承担着承上启下的关键作用。它向下连接各类物联网设备&#xff0c;实现设备的接入、管理与控制&#xff1b;向上为应用开发提供统一的数据接口和共性模块工具&#xff0c;支撑起各种丰富多彩的…

STM32CubeMX-H7-15-SPI通信协议读写W25Q64

前言 SPI&#xff08;Serial Peripheral Interface&#xff09;通信协议是一种高速、全双工、同步的串行通信协议 本篇文章就使用W25Q64模块来学习SPI,包括软件SPI代码的编写&#xff0c;硬件SPI&#xff0c;中断SPI和DMASPI SPI的应用场景和模块 &#xff01;这里是抄AI的&a…

【软考】论devops在企业信息系统开发中的应用

摘要&#xff1a; 随着互联网的不断发展&#xff0c;各行各业都在建设自己的企业信息系统&#xff0c;而随着业务的不断升级和复杂化&#xff0c;系统的更新迭代速度越来越快&#xff0c;系统也越来越复杂。对于信息系统开发者&#xff0c;架构师&#xff0c;管理者&#xff0c…

生物化学笔记:医学免疫学原理22 肿瘤及肿瘤治疗

肿瘤及肿瘤治疗 免疫疗法 CAR-T细胞介绍

JVM考古现场(二十二):降维打击·用二向箔优化内存模型

"警报&#xff01;三维堆内存正在经历二维化坍缩&#xff01;" 我腰间的玄铁令突然震动&#xff0c;在蜀山剑派的量子剑阵中投射出诡异的曼德博分形——这是三体文明发动降维打击的铁证&#xff01; 楔子&#xff1a;二向箔奇点降临 昆仑镜监控日志&#xff1a; // …

操作系统-PV

&#x1f9e0; 背景&#xff1a;为什么会有 PV&#xff1f; 类比&#xff1a;内存&#xff08;生产者&#xff09; 和 CPU&#xff08;消费者&#xff09; 内存 / IO / 磁盘 / 网络下载 → 不断“生产数据” 例如&#xff1a;读取文件、下载视频、从数据库加载信息 CPU → 负…

医院数据中心智能化数据上报与调数机制设计

针对医院数据中心的智能化数据上报与调数机制设计,需兼顾数据安全性、效率性、合规性及智能化能力。以下为系统性设计方案,分为核心模块、技术架构和关键流程三部分: 一、核心模块设计 1. 数据上报模块 子模块功能描述多源接入层对接HIS/LIS/PACS/EMR等异构系统,支持API/E…

【MATLAB代码例程】AOA与TOA结合的高精度平面地位,适用于四个基站的情况,附完整的代码

本代码实现了一种基于到达角(AOA) 和到达时间(TOA) 的混合定位算法,适用于二维平面内移动或静止目标的定位。通过4个基站的协同测量,结合最小二乘法和几何解算,能够有效估计目标位置,并支持噪声模拟、误差分析和可视化输出。适用于室内定位、无人机导航、工业监测等场景…

PC主板及CPU ID 信息、笔记本电脑唯一 MAC地址获取

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 PC主板及CPU ID 信息物理 MAC地址获取win11 新电脑 wmic 安装❤️ 欢迎一起学AI…

C++17 信号量模拟实现

C17 信号量模拟实现 一、实现原理 C17 标准库没有原生信号量(C20才有)&#xff0c;但可以通过 std::mutex std::condition_variable 模拟实现。以下是核心逻辑&#xff1a; #include <mutex> #include <condition_variable>class CountingSemaphore { private:…

web后端语言中篇

#作者&#xff1a;允砸儿 #日期&#xff1a;乙巳青蛇年 三月十八 笔者本来打算隔一天给它更完的&#xff0c;但是事情有点多这几天&#xff0c;实在是抱歉。废话不多说直接进入正题。 PHP流程控制语句 什么是流控:流程控制语句用于决定代码的执行顺序。 #注意流程控制语句…

Spine-Leaf 与 传统三层架构:全面对比与解析

本文将详细介绍Spine-Leaf架构&#xff0c;深入对比传统三层架构&#xff08;Core、Aggre、Access&#xff09;&#xff0c;并探讨其与Full-mesh网络和软件定义网络&#xff08;SDN&#xff09;的关联。通过通俗易懂的示例和数据中心网络分析&#xff0c;我将帮助您理解Spine-L…

Vmware esxi 查看硬盘健康状况

起因 硬盘掉盘 - - 使用自带的命令esxcli 列出所有硬盘 esxcli storage core device list[rootlocalhost:~] esxcli storage core device list t10.NVMe____INTEL_MEMPEK1W016GAL____________________PHBT83660BYP016D____00000001Display Name: Local NVMe Disk (t10.NVMe…

4.黑马学习笔记-SpringMVC(P43-P47)

1.SpringMVC简介 SpringMVC技术&#xff08;更少的代码&#xff0c;简便&#xff09;与servlet技术功能相同&#xff0c;属于web层开发技术。 SpringMVC是一种基于java实现MVC模型的轻量级web框架。 轻量级指的是&#xff08;内存占用比较低&#xff0c;运行效率高&#xff09;…

【文件操作与IO】详细解析文件操作与IO (一)

本篇博客给大家带来的是文件操作的知识点. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快乐顺便进步 一. …

PMP考试费能报销吗?报销流程是什么?

最近也是到了6月和8月PMP考试的报名高峰期&#xff0c;后台有小伙伴最常问的问题就是&#xff0c;PMP考试费比较贵&#xff0c;能不能报销&#xff1f;报销流程是什么&#xff1f; 先给大家分享一下最新PMP报名消息和考试信息&#xff1a; 添加图片注释&#xff0c;不超过 140…

学习threejs,使用EffectComposer后期处理组合器(采用RenderPass、GlitchPass渲染通道)

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.EffectComposer 后期…

docker部署springboot(eureka server)项目

打jar包 使用maven&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17&…