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++支持函数重载:会有一套函数名字修饰规则,在函数名字中引入参数类型之类的填入符号表,这样子编译器寻找时就可以精确找到对应函数地址。
所以只要参数不同,修饰的名字就不同,就支持了重载。
相关文章:
C++入门基础:命名空间,缺省参数,函数重载,输入输出
命名空间: C语言是基于C语言的,融入了面向对象编程思想,有了很多有用的库,所以接下来我们将学习C如何优化C语言的不足的。 在C/C语言实践中,在全局作用域中变量,函数,类会有很多,这…...
GPU怎么绑定到服务器上
确认服务器与 GPU 兼容性1:不同的服务器和 GPU 型号连接方式有所不同,要确保所选的 GPU 卡与服务器兼容。可通过服务器和 GPU 的产品文档,或使用服务器厂商提供的兼容性查询工具进行确认。安装前准备:关闭服务器电源,并…...
opencv函数展示2
一、像素操作与算术运算 1.cv2.split() 2. cv2.merge() 3.cv2.add() 4.cv2.bitwise_and() 5.cv2.bitwise_or() 6.cv2.inRange() 二、仿射变换 1.cv2.getRotationMatrix2D() 2.cv2.warpAffine() 3.cv2.flip() 4.cv2.resize() 三、透视变换 1.cv2.getPerspectiveTransform() 2…...
零基础上手Python数据分析 (16):DataFrame 常用统计分析方法
写在前面 —— 超越简单排序,探索数据内在规律,掌握Pandas统计分析基础 上一篇博客,我们学习了如何使用 Pandas 对 DataFrame 进行排序和排名,这使得我们能够更好地组织数据并快速定位关键信息。 然而,仅仅对数据进行排序和排名,还不足以完全理解数据。 要想更深入地解…...
文件系统 软硬连接
🌻个人主页:路飞雪吖~ 🌠专栏:Linux 目录 一、理解文件系统 🌠磁盘结构 二、软硬连接 🌟软硬链接 🌠软链接: 🌠硬链接: 🌟理解软硬链接的应…...
Linux环境基础开发工具使用
本节目标: 1. 学习yum工具,进行软件安装 2. 掌握vim编辑器使用,学会vim的简单配置 3. 掌握gcc/g编译器的使用,并了解其过程,原理 4. 掌握简单gdb使用于调试 5. 掌握简单的Makefile编写,了解其运行思想…...
秘密任务 2.0:如何利用 WebSockets + DTOs 设计实时操作
在之前的文章中,我们探讨了为什么 DTO 是提升 API 效率和安全性的秘密武器。现在,我们进入了一个全新的场景——我们将深入探讨如何通过 WebSockets DTOs 实现实时操作! Agent X 正在进行一项高风险的卧底任务。突然,总部更新了…...
LeetCode hot 100—括号生成
题目 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 示例 1: 输入:n 3 输出:["((()))","(()())","(())()","()(())",&…...
2025.04.17【Dendrogram】生信数据可视化:Dendrogram图表详解
Dendrogram customization Go further with ggraph: edge style, general layout, node features, adding labels, and more. Customized circular dendrogram Learn how to build a circular dendrogram with proper labels. 文章目录 Dendrogram customizationCustomized c…...
SDL基础
SDL SDL(Simple DirectMedia Layer)是一个开源的跨平台多媒体开发库,主要用于开发需要图形、音频和输入设备支持的应用程序。它使用C语言编写,提供了简单易用的API,**能够帮助开发者快速实现跨平台的多媒体功能。**SD…...
硬件工程师面试常见问题(2)
第六问:你知道那些常用逻辑电平?TTL与COMS电平可以直接互连吗? 逻辑电平:是数字电路中用于表示二进制逻辑状态(0 和 1)的电压或电流信号范围,是数字系统中器件间信号传输的统一标准。 注:逻辑电…...
Python自学第2天:条件语句,循环语句
条件语句 1.条件判断 score 60 if score > 90:print("优秀") elif score > 60:print("及格") else:print("不及格") 注意: 1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。2、使用缩进来划…...
2025年4月16日华为笔试第一题100分
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 博物馆展览规划 问题描述 卢小姐是一家著名博物馆的策展人,她需要从众多展品中选择一些组成新的展览。每件展品可以展示不同的历史文化主题,而博物馆希望通过最少的展品数量覆…...
智能体开发的范式革命:Cangjie Magic全景解读与实践思考
引言:当智能体开发遇见仓颉魔法 在人工智能技术日新月异的今天,智能体(Agent)开发正从实验室走向产业应用的核心舞台。2025年3月,仓颉社区推出的Cangjie Magic开源平台,以其创新的设计理念和技术架构,为这一领域带来了…...
LeetCode hot 100—单词搜索
题目 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或…...
基于flask+vue框架的灯饰安装维修系统u49cf(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:用户,工单人员,服务项目,订单记录,服务记录,评价记录 开题报告内容 基于 FlaskVue 框架的灯饰安装维修系统开题报告 一、选题背景与意义 (一)选题背景 随着城市化进程的加速与居民生活品质的显著提升…...
C/C++指针
为什么要使用指针 函数的值传递,无法通过调用函数,来修改函数的实参;被调用函数需要提供更多的“返回值”给调用函数;减少值传递时带来的额外开销,提高代码执行效率 指针定义:指针是什么 int age18; /* …...
Unity编辑器扩展之项目资源查找工具
一、需要实现的效果如下: 二、在项目的Asset目录下新增Editor目录,新增AssetSearchWindow和EditorDefine和EditorTools这三个C#脚本,并复制以下的代码保存好之后,就可以实现上述功能啦。 -------------------------------------------EditorTools脚本Begin----------------…...
什么是分布式锁?
分布式锁是一种在分布式系统中控制资源共享的机制。 一、背景和作用 在单机环境下,当多个线程同时访问共享资源时,可以通过线程锁(如 Java 中的 synchronized 关键字、ReentrantLock 等)来保证操作的原子性、可见性和有序性&#…...
ESP32- 开发笔记- 硬件设计-ESP32-C3 天线设计-利用嘉立创EDA来设计
这个硬件设计,只是一个随手记录文档。如果中间有什么问题,欢迎大家提出来。 1 板载天线 1.1 背景介绍 PCB(Printed Circuit Board)板载天线是现代电子设备中用于无线通信的一种关键组件,它直接集成在电路板上&#…...
setTimeoutsetIntervalrequestAnimationFrame
requestAnimationFrame 详解及与 setTimeout/setInterval 的比较 requestAnimationFrame(简称 rAF)是浏览器提供的专门用于 动画渲染 的 API,相比 setTimeout 和 setInterval,它在性能和流畅度上有显著优势。以下是详细解析和对比…...
Python内置函数---anext()
用于异步迭代器的核心工具,专为处理异步数据流设计。 1. 基本语法 await anext(async_iterator, default) 参数: async_iterator :实现了异步迭代协议的对象(如异步生成器、异步迭代器类)。 default (可选…...
JavaEE——线程安全
目录 前言1.线程安全的定义2.线程安全问题产生的原因2.1 多个线程修改一个变量2.2 修改操作不是原子的2.3 内存可见性引起的线程安全问题 3.解决线程安全问题的方法3.1 通过synchronized关键字加锁3.2 使用volatile关键字 总结 前言 在使用多线程的时候,难免会出现…...
MongoServerError: Authentication failed.处理办法
1停止MongoDB服务: systemctl stop mongod2临时修改MongoDB配置,禁用认证: vim /etc/mongdb.config 在配置文件中找到 security:authorization: disabled # 临时关闭认证3.重启MongoDB服务 # 重启MongoDB服务 sudo systemctl restart mon…...
IOS微信小程序无法显示背景图片
最近线上突然出现了一个问题,就是原来的在线上的小程序无法显示背景图片。而且这个问题只有在IOS上才有。在安卓上是正常的。 然后这里和前端沟通说是,看能不能用苹果手机真机调试。果然也成功复现出来了,部分图片无法显示。 然后在网上找了…...
实验五 8255和LED数码管显示实验
一、实验目的 1.掌握并行接口8255A的工作原理及使用方法。 2.了解七段数码管显示数字的原理。 3.掌握多位数码显示的接口技术。 二、实验电路 三、实验内容 1.静态显示:按图3连接好电路࿰…...
秒杀系统解决两个核心问题的思路方法总结:1.库存超卖问题;2.用户重复抢购问题。
秒杀系统解决两个核心问题 秒杀系统解决两个核心问题:一、解决库存超卖的核心逻辑:解释:原子性保证: 二、如何避免重复抢购:使用 Redis 做唯一标识判断优点: 三、流程完整梳理:四、通过数据库建…...
大数吞小数
A-春_牛客练习赛134 double 的有效数字约 15-17 位十进制,因此: 如果两个数的数量级相差超过 15-16 个数量级,较小的数会被吞掉。...
1-9 堆宝塔
堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小,按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明宝宝采取的策略如下: 首先准备两根柱子,一根 A 柱串宝塔,一根 B 柱用于临时叠放。把第 1 块彩虹圈…...
Java虚拟机(JVM)平台无关?相关?
计算机的概念模型 计算机实际上就是实现了一个图灵机模型。即,输入参数,根据程序计算,输出结果。图灵机模型如图。 Tape是输入数据,Program是针对这些数据进行计算的程序,中间横着的方块表示的是机器的状态。 目前使…...
第七章--查找
查找表 定义 由同一类型的数据元素(或记录)构成的集合。 1)特点:数据元素的类型相同;结构松散→先后次序无关紧要,只关心是否在集合内。 2)常用操作:查询某个“特定的”数据元素是否在查找表中…...
photo-sphere-viewer 4.8.1在vue中使用
photo-sphere-viewer 加载单张平面图 import { Viewer } from photo-sphere-viewerthis.viewer new Viewer({panorama: ‘完整的url,也可以是一个base64’,// Containercontainer: document.getElementById(viewer1),navbar: true,// Resize the panoramasize: {width: 100%,…...
vue MarkdownIt标签多出了<p>标签导致高度变丑
效果如下: [点击并拖拽以移动] F12观察后发现多了 标签包裹,所以要解决 标签。 在 markdown-it 中禁用自动包裹 <p> 标签的方法 要让 markdown-it 渲染的 Markdown 内容不自动包裹 <p> 标签,你可以使用以下两种方…...
《Java 并发编程实践》阅读笔记(一):线程重要性
文章目录 一. 并发历史二. 线程优势三. 线程带来的风险1. 安全性问题2. 活跃性问题3. 性能问题 四. 线程无处不在示例1: Timer示例2: 远程方法调用(Remote Method Invocation, RMI)示例3: GUI 程序 一. 并发历史 操作系统的出现 大型机时代, 没有操作系统, 一台主机只能执行一…...
算法思想之分治-归并
欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之分治-归并 发布时间:2025.4.17 隶属专栏:算法 目录 算法介绍核心思想与步骤时空复杂度分析C代码实现关键特性与优化 例题排序数组题目链接题目描述算法思路代码实现 交易逆序对的总…...
Vue基础(5)_事件修饰符
事件修饰符 Vue中的事件修饰符: 1、prevent:阻止默认事件(常用)。 2、stop:阻止事件冒泡(常用)。 3、once:事件只触发一次(常用)。 4、capture:使用事件的捕获模式。 5、self:只有event.target是当前操作的…...
网络编程 - 1
目录 为什么需要网络编程? —— 丰富的网络资源 什么是网络编程 网络编程中的基本概念 发送端和接收端 请求和相应 客户端和服务端 常见的客户端服务端模型 Socket 套接字 概念 分类 解释 有连接 / 无连接 可靠传输 / 不可靠传输 面向字节流 / 面向数…...
github | 仓库权限管理 | 开权限
省流版总结: github 给别人开权限:仓库 -> Setting -> Cllaborate -> Add people GitHub中 将公开仓库改为私有:仓库 -> Setting -> Danger Zone(危险区) ->Change repository visibility( 更改仓…...
【系统搭建】DPDK关键概念与l2fwd源码解析
DPDK(Data Plane Development Kit)是一套用于高性能网络数据面处理的开发框架,其核心设计在于绕过内核协议栈,它提供了一个用户空间下的高效数据包处理库函数,可以用于快速开发高性能的网络应用程序,如网络…...
【Qt】初识Qt(一)
目录 一、Qt的背景二、认识Qt项目 一、Qt的背景 关于客户端开发: 客户端开发的重要任务,是编写和用户交互的界面,和用户交互的界面有两种风格: TUI:命令行界面,也叫终端界面GUI:图形化界面 Q…...
Django REST framework 并结合 `mixin` 的示例
下面为你提供一个使用 Django REST framework 并结合 mixin 的示例,该示例将实现一个简单的图书管理 API。 项目需求 我们要创建一个图书管理系统的 API,支持对图书信息的创建、读取、更新和删除操作。 实现步骤 1. 项目初始化 首先,确保你已经安装了 Django 和 Django…...
《前端性能优化秘籍:打造极致用户体验》
在当下,网站和应用的性能表现直接关乎用户去留。快速加载、流畅交互的页面能让用户沉浸其中,反之,缓慢的响应速度则会让他们毫不犹豫地离开。对于前端开发者而言,性能优化不仅是技术追求,更是提升用户体验、增强产品竞…...
数据结构与算法学习导航
目录 指导思想资料总结代码随想录hello-algoOI-WIKI 一名麻瓜的刷leetcode的简单概述。 在这里对过去的自己说: 如果你相信算法有用你就刷刷leetcode,如果不相信面试会让你相信。 当然,现在我确实认为算法和数据结构有用,leetcode也有用。 …...
【Python】用Python写一个俄罗斯方块玩玩
【Python】用Python写一个俄罗斯方块玩玩 一、引言1.成品效果展示 二、思考准备1.思考设计2.代码设计2.1 游戏页面2.2 控件设计2.2.1 方块生成2.2.2 方块碰撞2.2.3 方块消融2.2.4 游戏主循环2.2.5 游戏窗口 三、游戏完整版 一、引言 今日看到侄子在玩游戏,凑近一看…...
nginx中的代理缓存
1.缓存存放路径 对key取哈希值之后,设置cache内容,然后得到的哈希值的倒数第一位作为第一个子目录,倒数第三位和倒数第二位组成的字符串作为第二个子目录,如图。 proxy_cache_path /xxxx/ levels1:2 2.文件名哈希值...
【深度学习】详解矩阵乘法、点积,内积,外积、哈达玛积极其应用|tensor系列02
博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: Yaoyao2024往期回顾:【深度学习】你真的理解张量了吗?|标量、向量、矩阵、张量的秩|01每日一言🌼: “脑袋想不明白的,就用脚想”…...
20.3 使用技巧3
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 20.3.5 禁止追加行与禁止删除行 通常情况下DataGridView最末一行是空白行,在此行单元格输入数据就可以追加新行。如果需要…...
使用代理IP提取数据的步骤是什么?代理IP如何提高爬虫采集效率?
在当今大数据时代,网络爬虫已成为获取互联网信息的重要手段。然而,许多网站为了防止数据被过度抓取,会设置反爬机制,如IP封禁、访问频率限制等。这时,使用代理IP就成为了一种有效的解决方案。本文将详细介绍使用代理IP…...
探索关系型数据库 MySQL
目录 引言 一.SQL的基本操作 1.数据库是什么? 什么是SQL? 1.1.OLTP 1.2.OLAP 1.3.SQL 1.4.DQL 1.5.DML 1.6.DDL 1.7.DCL 1.8.TCL 1.9.数据库术语 2.MySQL体系结构 2.1.连接者 2.2.MySQL 内部连接池 2.3.管理服务和工具组件 2.4.SQL接口 …...
Redis--事务
目录 一、事务介绍 二、事务操作 2.1 MULTI 2.2 EXEC 2.3 DISCARD 2.4 WATCH 2.5 UNWATCH 一、事务介绍 Redis 的事务和 MySQL 的事务概念上是类似的. 都是把一系列操作绑定成⼀组. 让这⼀组能够批量执行. 但是注意体会 Redis 的事务和 MySQL 事务的区别: 1.弱化的原子性…...