当前位置: 首页 > news >正文

C到C++的敲门砖-1

文章目录

  • 关键字
  • 命名空间
  • 输入和输出
  • 缺省参数
  • 函数重载

关键字

相较于C语言32个关键字:

autodoubleintstruct
breakelselongswitch
caseenumregistertypedef
charexternreturnunion
constfloatshortunsigned
continueforsignedvoid
defaultgotosizeofvolatile
doifwhilestatic

c++的关键字变成了63个:

asmdoifreturn
trycontinueautodouble
shorttypedeffordynamic_cast
intsignedtypeidpublic
breakelselongsizeof
typenamethrowcaseenum
mutablestaticunionwchar_t
catchexplicitnamespacestatic_cast
unsigneddefaultcharexport
newstructusingfriend
classexternoperatorswitch
virtualregisterconstfalse
privatetemplatevoidtrue
const_castfloatprotectedthis
volatilewhiledeletegoto
reinterpret_castinlinebool

显然多一个关键字,多一种可能性。>.<

命名空间

在C语言中,在同一作用域中,同名是不允许的。这就会引发一些问题,例如包含库函数的时候,和定义的全局变量或者函数名冲突。

#include<stdlib.h>
#include<stdio.h>
int rand = 10;
int main()
{printf("%d\n", rand);return 0;
}

在这里插入图片描述
如上所见,我们定义的全局变量和头文件stdlib.h里面的rand函数冲突了,导致程序无法运行。
这样冲突的现象在开发过程中是很容易遇到的,所以C语言这种统一规定所有变量不能重名的设定是不方便的。
由此,c++引入了命名空间的概念:
我们可以用关键字namespace来定义命名空间,

namespace test1{// 命名空间中可以定义变量/函数/类型int rand = 10;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};}
namespace test2{double rand = 10.;}

这样我们就能在不同命名空间里面取相同名字rand的变量而不引发报错。
当我们需要使用命名空间时,有以下几种方式:

1.using namespce ;

#include<iostream>
namespace test2{double rand = 10.;}
using namespace std;
using namespace test2;
int main()
{cout<<rand<<endl;return 0;
}

using namespace,相当于将命名空间置于全局变量中,里面的所有变量名都可以使用。其中std是c++标准库的命名空间,我们要使用cin、cout等函数时都要使用这个命名空间。
这种方式的缺陷也是很明显的,如果直接把命名空间都解放了,那和c语言又有什么区别呢?
因此还有以下使用方式:
2.使用作用域限定符"::"

#include<iostream>
namespace test2{double rand = 10.;}
using namespace test2;
int main()
{std::cout<<rand<<endl;return 0;
}

如上的cout,我们就没有using namespace std,而是用“命名空间::变量名”的形式来使用cout。
需要注意的是当::前为空的时候,默认作用域为全局域
这种方式能够有效避免了变量名冲突的问题,但同时如果我们这个程序里要多次使用cout这个函数,那每个cout前都要加上std::就显得相当麻烦。因此命名空间的使用还有第三种方式:
3.使用using将命名空间中某个成员引入

#include<iostream>
namespace test2{double rand = 10.;}
using namespace test2;
using std::cout;
int main()
{cout<<rand<<endl;return 0;
}

如上我们可以单独拿出std里面的cout函数来使用,这种方式就兼具了上述两种方式的优点,既不会冲突也不会那么麻烦。
当然具体使用哪种方式还是要视情况而定的。不可否认的是,命名空间这个语法的确改善了C语言一大不足之处。

输入和输出

细心的读者已经发现,上面我们使用的输入输出函数不是stdio.h下面的scanf和printf,而是iostream下面的cin和cout。
这也是C和C++不同的地方,特别是当我们使用printf打印数据时,需要使用占位符来格式化数据,而cout则会自动识别数据类型。
使用cout的<<符号称为流插入符,即将数据插入输出流然后输出到屏幕。
那么使用cin的>>符号称为流提取符,从键盘上读取数据到变量中。

缺省参数

在C语言中定义一个函数如:

int Add(int a,int b)
{return a+b;
}

调用Add函数时,就必须输入两个实参传输过去。
而c++中我们可以使用缺省参数:

int Add(int a=0,int b=0)
{return a+b;
}

这时当我们不传入实参时,a和b的值就默认为0.这就称为缺省参数。
当然我们可以传入a,b的值也可以只传入a的值,但不能只传入b的值
关于缺省参数分为以下几类:

  • 全缺省参数
void Func(int a = 10, int b = 20, int c = 30){cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;}

即函数的参数全为缺省参数。

  • 半缺省参数
void Func(int a, int b = 10, int c = 20){cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;}

即有一部分参数为缺省参数。
需要注意的是:

  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
  2. 缺省参数不能在函数声明和定义中同时出现(在声明中给出缺少参数,而在定义中不能给缺省参数)
  3. 缺省值必须是常量或者全局变量(通常为常量

函数重载

在C语言中,函数重名是绝对不允许的,编译器会报错。而在c++中,允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同。
如:

int Add(int a,int b)
{return a+b;
}
double Add(double a,double b)
{return a+b;
}

如上函数定义在c++中是允许的。而在C语言中是不允许的。
这是因为在C语言中,同名函数在编译时给出指向函数的地址都是相同的,因此无法识别同名函数的不同类型。而在c++的编译过程中,会用函数名和参数类型来一定标识函数,由此就能区分开同名函数的不同类型。

相关文章:

C到C++的敲门砖-1

文章目录 关键字命名空间输入和输出缺省参数函数重载 关键字 相较于C语言32个关键字&#xff1a; autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledoifwhilesta…...

Qt文件以及文件夹相关类(QDir、QFile、QFileInfo)的使用

关于Qt相关文件读写操作以及文件夹的一些知识&#xff0c;之前也写过一些博客&#xff1a; Qt关于路径的处理&#xff08;绝对路径、相对路径、路径拼接、工作目录、运行目录&#xff09;_qt 相对路径-CSDN博客 C/Qt 读写文件_qt c 读取文本文件-CSDN博客 C/Qt读写ini文件_…...

ChatGPT编程实现简易聊天工具

ChatGPT编程实现简易聊天工具 今天借助[[小蜜蜂]][https://zglg.work]网站的ChatGPT练习socket编程&#xff0c;实现一个简易聊天工具软件。 环境&#xff1a;Pycharm 2021 系统&#xff1a;Mac OS 向ChatGPT输入如下内容&#xff1a; ChatGPT收到后&#xff0c;根据返回结…...

C#-用于Excel处理的程序集

在.NET开发中&#xff0c;处理Excel文件是一项常见的任务&#xff0c;而有一些优秀的Excel处理包可以帮助开发人员轻松地进行Excel文件的读写、操作和生成。本文介绍了NPOI、EPPlus和Spire.XLS这三个常用的.NET Excel处理包&#xff0c;分别详细介绍了它们的特点、示例代码以及…...

HTTPS基础

目录 HTTPS简介 HTTP与HTTPS的区别 CA证书 案例 服务器生成私钥与证书 查看证书和私钥存放路径 Cockpit(图像化服务管理工具) HTTPS简介 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&…...

【Flink SQL】Flink SQL 基础概念(四):SQL 的时间属性

《Flink SQL 基础概念》系列&#xff0c;共包含以下 5 篇文章&#xff1a; Flink SQL 基础概念&#xff08;一&#xff09;&#xff1a;SQL & Table 运行环境、基本概念及常用 APIFlink SQL 基础概念&#xff08;二&#xff09;&#xff1a;数据类型Flink SQL 基础概念&am…...

文字弹性跳动CSS3代码

文字弹性跳动CSS3代码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 下载地址 文字弹性跳动CSS3代码...

前端小白的学习之路(事件流)

提示&#xff1a;事件捕获&#xff0c;事件冒泡&#xff0c;事件委托 目录 事件模型(DOM事件流) 1.事件是什么 2.事件流 1).事件流的三个阶段 3.参考代码 二、事件委托 1.概念 2.使用案例 3.阻止冒泡行为 事件模型(DOM事件流) 1.事件是什么 1). 事件是HTML和Javascr…...

电脑文件误删除如何恢复?分享三个简单数据恢复方法

在日常使用电脑的过程中&#xff0c;文件误删除的情况时有发生。无论是由于操作失误还是病毒感染&#xff0c;丢失的文件都可能对我们的工作和学习造成极大的影响。因此&#xff0c;掌握文件恢复的方法显得尤为重要。下面围绕“电脑文件误删除如何恢复”这一主题&#xff0c;给…...

MySQL实战:监控

监控指标 性能类指标 名称说明QPS数据库每秒处理的请求数量TPS数据库每秒处理的事务数量并发数数据库实例当前并行处理的会话数量连接数连接到数据库会话的数量缓存命中率Innodb的缓存命中率 功能类指标 名称说明可用性数据库是否正常对外提供服务阻塞当前是否有阻塞的会话…...

MySQL自增主键自动生成的主键重置

需求描述&#xff1a; 从主键1开始&#xff0c;insert操作自增了五个&#xff0c;库里五条数主键是1、2、3、4、5&#xff1b; 然后把主键是3、4、5的三条数据给删了&#xff0c;再继续insert&#xff0c;主键就是6了 因为这里表会把最大的数即5记住&#xff0c;下次自增即为…...

reverse_iterator实现

对于实现reverse_iterator&#xff0c;我们可以学栈和队列的实现过程&#xff0c;利用适配器&#xff0c;实现如下; #pragma oncetemplate<class Iterator,class Ref,class Ptr> class reverse_Iterator { public://构造函数&#xff1a;reverse_Iterator(Iterator it):…...

C++:什么情况下函数应该声明为纯虚函数

在C中&#xff0c;函数应该在以下情况下声明为纯虚函数&#xff1a; 抽象基类&#xff1a;当你希望定义一个基类&#xff0c;该基类不能被实例化&#xff0c;只能作为其他类的基类时&#xff0c;你应该在基类中声明至少一个纯虚函数。这样的基类被称为抽象基类。纯虚函数通过在…...

【全面了解自然语言处理三大特征提取器】RNN(LSTM)、transformer(注意力机制)、CNN

目录 一 、RNN1.RNN单个cell的结构2.RNN工作原理3.RNN优缺点 二、LSTM1.LSTM单个cell的结构2. LSTM工作原理 三、transformer1 Encoder&#xff08;1&#xff09;position encoding&#xff08;2&#xff09;multi-head-attention&#xff08;3&#xff09;add&norm 残差链…...

区块链推广海外市场怎么做,CloudNEO服务商免费为您定制个性化营销方案

随着区块链技术的不断发展和应用场景的扩大&#xff0c;区块链项目希望能够进入海外市场并取得成功已成为越来越多公司的目标之一。然而&#xff0c;要在海外市场推广区块链项目&#xff0c;需要采取有效的营销策略和措施。作为您的区块链项目营销服务商&#xff0c;CloudNEO将…...

【S5PV210】 | ARM的指令集合

【S5PV210】 | ARM的指令集合 时间&#xff1a;2024年3月17日23:32:06 目录 文章目录 【S5PV210】 | ARM的指令集合目录 ARM指令集具有一系列显著的特点。首先&#xff0c;它属于RISC&#xff08;精简指令集计算机&#xff09;架构&#xff0c;这意味着译码机制相对简单。在AR…...

2024-3-17Go语言入门

在Go语言中&#xff1a; var a chan int 定义了一个名为 a 的变量&#xff0c;其类型为 chan int。这意味着 a 是一个整型值的通道&#xff08;channel&#xff09;。通道是Go语言中用于goroutine之间通信的一种机制&#xff0c;你可以通过通道发送和接收特定类型的值。在这个例…...

AJAX-XMLHttpRequest

XMLHttpRequest 定义&#xff1a; XMLHttpRequest对象用于与服务器交互。通过XMLHttpRequest可以在不断刷新页面的情况下请求特定URL&#xff0c;获取数据。这允许网页在不影响用户操作的情况下&#xff0c;更新页面的局部内容。 关系&#xff1a; axios内部采用XMLHttpReques…...

【GPT-SOVITS-04】SOVITS 模块-鉴别模型解析

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…...

论文阅读_时序模型_iTransformer

1 2 3 4 5 6 7 8英文名称: ITRANSFORMER: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING 中文名称: ITRANSFORMER&#xff1a;倒置Transformers在时间序列预测中的有效性 链接: https://openreview.net/forum?idX6ZmOsTYVs 代码: https://github.com/thum…...

EmbeddingGemma-300m效果展示:多语言文本相似度计算实战

EmbeddingGemma-300m效果展示&#xff1a;多语言文本相似度计算实战 1. 引言 文本嵌入模型正在改变我们处理多语言内容的方式。想象一下&#xff0c;你有一个包含中文、英文、法文等多种语言的文档库&#xff0c;如何快速找到语义相似的内容&#xff1f;传统的关键词匹配方法…...

Arcgis符号化实战:用矢量文件制作专业级统计地图(附最新配色方案)

ArcGIS符号化实战&#xff1a;用矢量文件制作专业级统计地图&#xff08;附最新配色方案&#xff09; 当你面对一叠枯燥的表格数据时&#xff0c;是否想过如何让这些数字"活"起来&#xff1f;统计地图正是将抽象数据转化为直观视觉表达的利器。作为地理信息系统领域的…...

革新性Koikatu体验增强工具:KK-HF_Patch效率提升指南

革新性Koikatu体验增强工具&#xff1a;KK-HF_Patch效率提升指南 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch 你是否曾在《Koikatu》游戏中遇到…...

【office2pdf】PPTX 字体解析与文本样式继承(PPTX_FONT_RESOLUTION.md)

摘要 本文档记录了 PPTX 保真度问题&#xff0c;该问题最初看起来像是布局错误&#xff0c; 但实际上是由不完整的字体和文本样式解析引起的。 可见的症状是多个幻灯片上的文本块&#xff0c;尤其是幻灯片 4 的"SKILLS"区域&#xff0c; 与 PowerPoint 不匹配&#x…...

57:L构建紫队协同:蓝队的协同防御

作者&#xff1a; HOS(安全风信子) 日期&#xff1a; 2026-03-07 主要来源平台&#xff1a; GitHub 摘要&#xff1a; 传统的红队和蓝队分离模式存在沟通障碍&#xff0c;导致防御效率低下。L构建了一套紫队协同系统&#xff0c;通过AI驱动的团队协作、知识共享和防御优化&…...

Qwen3-14B镜像轻量化设计:50GB系统盘+40GB数据盘高效空间管理

Qwen3-14B镜像轻量化设计&#xff1a;50GB系统盘40GB数据盘高效空间管理 1. 镜像概述与核心优势 Qwen3-14B私有部署镜像是一款专为RTX 4090D 24GB显存显卡优化的轻量化解决方案。通过精心设计的50GB系统盘40GB数据盘架构&#xff0c;实现了大模型部署的空间效率最大化。这个镜…...

告别复杂配置:Ostrakon-VL-8B零售多模态模型一键部署实战

告别复杂配置&#xff1a;Ostrakon-VL-8B零售多模态模型一键部署实战 1. 为什么选择Ostrakon-VL-8B&#xff1f; 零售行业每天需要处理大量商品图片、货架陈列和顾客反馈&#xff0c;传统的人工分析方式效率低下且成本高昂。Ostrakon-VL-8B作为专为零售场景优化的多模态大模型…...

Go 协程池任务调度架构

Go 协程池任务调度架构&#xff1a;高并发任务的智慧引擎 在现代高并发编程中&#xff0c;Go语言的协程&#xff08;goroutine&#xff09;以其轻量级和高效性成为开发者的首选。无限制地创建协程可能导致资源耗尽&#xff0c;而协程池&#xff08;goroutine pool&#xff09;…...

CMake实战:用ExternalProject_Add一键集成第三方库(附spdlog完整配置)

CMake实战&#xff1a;用ExternalProject_Add一键集成第三方库&#xff08;附spdlog完整配置&#xff09; 在C项目开发中&#xff0c;第三方库的集成往往是最耗时的环节之一。传统的手动下载、编译、配置头文件路径和链接库文件的方式&#xff0c;不仅效率低下&#xff0c;还会…...

STM32CubeMX实战指南:从零搭建HAL库项目与LED控制

1. STM32CubeMX与HAL库开发入门 第一次接触STM32开发的朋友可能会被各种专业术语吓到——寄存器、固件库、HAL库、时钟树配置... 作为一个从51单片机转战STM32的"过来人"&#xff0c;我完全理解这种困惑。三年前我刚开始用STM32F103时&#xff0c;光是搭建开发环境就…...