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

命名空间:

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.mzph.cn/pingmian/77586.shtml

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

相关文章

缓存 --- Redis基本数据类型

缓存 --- Redis基本数据类型 Redis Intro5种基础数据类型 Redis Intro Redis&#xff08;Remote Dictionary Server&#xff09;是一款开源的高性能键值存储系统&#xff0c;常用于缓存、消息中间件和实时数据处理场景。以下是其核心特点、数据类型及典型使用场景&#xff1a; …

Redis命令——list

列表类型是用来存储多个有序的字符串&#xff0c;列表中的每个字符串称为元素&#xff08;element&#xff09;&#xff0c;⼀个列表最多可以存储个元素 在 Redis 中&#xff0c;可以对列表两端插入&#xff08;push&#xff09;和弹出&#xff08;pop&#xff09;&#xff0c;…

Android Jetpack Compose 状态管理解析:remember vs mutableStateOf,有啥不一样?为啥要一起用?

&#x1f331;《Jetpack Compose 状态管理解析&#xff1a;remember vs mutableStateOf&#xff0c;有啥不一样&#xff1f;为啥要一起用&#xff1f;》 在 Jetpack Compose 的世界里&#xff0c;UI 是响应式的。这意味着当状态发生变化时&#xff0c;UI 会自动重组&#xff0…

使用 PCL 和 Qt 实现点云可视化与交互

下面我将介绍如何结合点云库(PCL)和Qt框架(特别是QML)来实现点云的可视化与交互功能&#xff0c;包括高亮选择等效果。 1. 基本架构设计 首先需要建立一个结合PCL和Qt的基本架构&#xff1a; // PCLQtViewer.h #pragma once#include <QObject> #include <pcl/point…

mybatis plus打印sql日志到指定目录

1、mybatis plus打印sql日志 参考文档&#xff1a;mybatis plus打印sql日志_mybatisplus日志打印-CSDN博客 2、修改 修改InfoLevelLogger Override public void debug(String s) {// 修改这里logger.info(s);log.debug(s); } 增加&#xff1a;log.debug(s); 修改logback.x…

vue3 watch和watchEffect 的用法和区别

在 Vue 3 里&#xff0c;watch 和 watchEffect 都是用于响应式数据变化的 API&#xff0c;但它们在使用方法和应用场景上存在差异。下面详细介绍它们的用法和区别。 用法 watch watch 用于监听特定的响应式数据源&#xff0c;当数据源发生变化时&#xff0c;会执行相应的回调…

Qt中修改了UI设计文件后编译不生效问题的解决办法

复制工程过来后&#xff1a; 1、删除build文件 2、删除.user文件&#xff0c;恢复为文件最初的那样 3、执行make distclean,删除所有由先前构建过程生成的文件 4、再次打开工程&#xff0c;修改ui文件编译生效&#xff01;

EtherCAT转ProfiNet边缘计算网关配置优化:汽车制造场景下PLC与机器人协同作业案例

1.行业背景与需求分析 智能汽车焊装车间是汽车制造的核心工艺环节&#xff0c;某德国豪华品牌在其上海MEB工厂新建的焊装车间中&#xff0c;采用西门子S7-1500PLC作为ProfiNet主站&#xff0c;负责整线协调与质量追溯&#xff1b;同时部署KUKAKR1500Titan机器人&#xff08;Eth…

day46—双指针-两数之和-输入有序数组(LeetCode-167)

题目描述 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 &l…

线性代数 | 知识点整理 Ref 1

注&#xff1a;本文为 “线性代数 | 知识点整理” 相关文章合辑。 因 csdn 篇幅合并超限分篇连载&#xff0c;本篇为 Ref 1。 略作重排&#xff0c;未整理去重。 图片清晰度限于引文原状。 如有内容异常&#xff0c;请看原文。 线性代数知识汇总 Arrow 于 2016-11-27 16:27:5…

比特币的跨输入签名聚合(Cross-Input Signature Aggregation,CISA)

1. 引言 2024 年&#xff0c;人权基金会&#xff08;Human Rights Foundation&#xff0c;简称 HRF&#xff09;启动了一项研究奖学金计划&#xff0c;旨在探讨“跨输入签名聚合”&#xff08;Cross-Input Signature Aggregation&#xff0c;简称 CISA&#xff09;的潜在影响。…

3.基础开发工具

1.软件包管理器 1.1什么是软件包 • 在Linux下安装软件, ⼀个通常的办法是下载到程序的源代码, 并进⾏编译, 得到可执⾏程序. • 但是这样太⿇烦了, 于是有些⼈把⼀些常⽤的软件提前编译好, 做成软件包(可以理解成windows上 的安装程序)放在⼀个服务器上, 通过包管理器可以很…

Golang errors 包快速上手

文章目录 1.变量2.类型3.函数3.1 New3.2 Is简介函数签名核心功能示例代码使用场景注意事项小结 3.3 As简介函数签名核心功能示例代码使用场景注意事项小结 3.4 Unwrap简介函数签名核心功能使用示例使用场景注意事项小结 3.5 Join简介函数签名核心功能使用场景注意事项小结 4.小…

Java File 类详解

Java File 类详解 File 类是 Java 中用于表示文件和目录路径名的抽象类&#xff0c;位于 java.io 包中。它提供了丰富的 API&#xff0c;用于操作文件系统&#xff0c;包括创建、删除、重命名、查询文件属性等功能。 1. File 类核心知识点 &#xff08;1&#xff09;构造方法…

基于javaweb的SpringBoot儿童爱心管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

Unity Nav Mesh导航系统的简单使用

标题 1.下载。2.面板位置3.object面板4.Area面板5.Bake面板6.Agent面板7.Nav Mesh Agent组件8.Nav Mesh Obstacle组件9.简单使用 1.下载。 unity2022以上版本要去packageManager中下载。 2.面板位置 3.object面板 Navigation Static&#xff1a;设置该物体是否被列入静态寻路…

FairyGUI图标文字合批失败的原因

1&#xff09;FairyGUI图标文字合批失败的原因 2&#xff09;为什么Cubemap的内存占用超高 3&#xff09;如何找到网格某个切面的中心点 4&#xff09;为什么SafeZone在倒屏后方向相反 这是第428篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了…

[BUG]Cursor C++扩展不支持

本文内容组织形式 问题描述失效原因解决方案使用野版C Extension 猜你喜欢结语 问题描述 日期&#xff1a;20250419 操作系统&#xff1a; mac C代码没有办法进行跳转&#xff0c;并且和以前的文本标亮也不同 并且还有如下问题弹窗 C/C 扩展只能与 Microsoft Visual Studio…

深⼊理解 JVM 执⾏引擎

深⼊理解 JVM 执⾏引擎 其中前端编译是在 JVM 虚拟机之外执⾏&#xff0c;所以与 JVM 虚拟机没有太⼤的关系。任何编程语⾔&#xff0c;只要能够编译出 满⾜ JVM 规范的 Class ⽂件&#xff0c;就可以提交到 JVM 虚拟机执⾏。⾄于编译的过程&#xff0c;如果你不是想要专⻔去研…

Ubuntu 部署 DeepSeek

在 Ubuntu 系统上部署 DeepSeek 模型&#xff0c;能让用户利用其强大的人工智能能力&#xff0c;同时保障数据的安全性与操作的自主性。不过&#xff0c;这一过程涉及诸多技术细节&#xff0c;需要谨慎操作。以下将为你详细介绍在 Ubuntu 系统部署 DeepSeek 的操作步骤及注意事…