【C++】入门(上)

news2024/11/19 4:44:28

本期博客给大家带来的全是干货,慢慢享用吧~

C++入门主要是一些对C语言不足的语法补充,废话不多说直接上干货:

一、C++的输出和输入

1.1 输出

在C++上我们要想在屏幕(控制台)上进行一些内容的输出可以使用关键字:

cout

具体操作:cout << 想要输出的内容

❗注意:使用cout必须包含< iostream >头文件以及按命名空间使用方法使用std ❗注意:<<是流插入运算符

📋下面来进行使用举例:

从中我们可以看出cout可以自动识别类型(字符串、整型等等)

❗注意:endl在这里起到了换行的作用

1.2 输入

在C++上我们要想在标准输入对象(键盘)上进行一些内容的输入可以使用关键字:

cin

具体操作:cin >> 想要输出的内容

❗注意:使用cout必须包含< iostream >头文件以及按命名空间使用方法使用std

❗注意:<<是流插入运算符

下面来进行使用举例:

从中我们可以看出cin可以自动识别类型(字符串、整型等等)

二、缺省参数

2.1 缺省参数概念

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

📋下面来举个栗子

void Fun(int a = 0)
{
    cout << a << endl;
}

int main()
{
    Fun(); // 没有传参时,使用参数的默认值
    Fun(1);// 传参时,使用指定的实参
    Fun(68);// 传参时,使用指定的实参
}

运行结果

2.2 全缺省参数

📌全缺省参数顾名思义函数的参数全部都有缺省值

📋例如

void Fun(int a = 0, int b = 5, int c = 2)//函数参数全部都有缺省值
{
    cout <<"a=" << a << endl;
    cout <<"b=" << b << endl;
    cout <<"c=" << c << endl;
}

运行结果:

根据运行结果,我们可以发现我们可以选择给部分参数传参

❗注意:但是传参时是按顺序一次给参数赋值,不可能跳过某个参数给其之后的参数传参(如上述例子就不可能发生只给a、c赋值不给b赋值的情况)

2.3 半(部分)缺省参数

📌半(部分)缺省参数顾名思义函数的部分参数没有有缺省值

📋举例举例

void Func(int a, int b = 10, int c = 20)//函数的部分参数没有有缺省值
{
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;
    cout << endl;
}

来看运行结果

❗注意:在定义部分缺省参数函数时,缺省参数必须从右往左依次来给出,不能间隔着给(按以上例子就不能出现a、c有缺省值,b没有缺省值的情况)

❗另外在最后要注意: 缺省参数不能在函数声明和定义中同时出现,要在声明中给出缺省值(如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值)

三、函数重载

自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!”

3.1 重载函数的概念

📌函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数类型类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。

📋下面来举个栗子

// 1、参数类型不同
int Add(int left, int right)
{
    cout << "int Add(int left, int right)" << endl;
    return left + right;
}
double Add(double left, double right)
{
    cout << "double Add(double left, double right)" << endl;
    return left + right;
}
// 2、参数个数不同
void f()
{
    cout << "f()" << endl;
}
void f(int a)
{
    cout << "f(int a)" << endl;
}
// 3、参数类型顺序不同
void func(int a, char b)
{
    cout << "func(int a,char b)" << endl;
}
void func(char b, int a)
{
    cout << "func(char b, int a)" << endl;
}

我们可以看到在此作用域内有add、f和func三个名字的六个函数,仔细观察可以发现add的两个函数的参数类型不同、f的两个函数参数个数不同、func的两个函数参数类型书顺序不同。这三种情况在C++中是可以存在的,并且能根据调用函数所给参数的区别很好来识别函数进行编译运行:

那就会存在一个问题,既然需要来识别参数类型来调用相对应的函数那会不会比C语言慢呢?

💡答案是会的,但是慢的是编译速度而不是运行速度(C++在编译时就要进行对函数参数类型的识别了)

3.2 C++支持函数重载的原理--名字修饰(name Mangling)

为什么C++支持函数重载,而C语言不支持函数重载呢?

这是因为C++和C语言在编译时对函数的处理不同。

📋下面来进行举例:

由于Windows下vs的修饰规则过于复杂,而Linux下g++的修饰规则简单易懂,下面我们使 用了g++演示了这个修饰后的名字:

采用C语言编译器编译后结果:

采用C++编译器编译后结果:

对比一下两种结果我们可以看出gcc的函数修饰后名字不变。而g++的函数修饰后变成【_Z+函数长度 +函数名+类型首字母】。

💡下面可以得出结论:在linux下,采用g++编译完成后,函数名字的修饰发生改变,编译器将函数参 数类型信息添加到修改后的名字中而添加的这些信息就可以很好支持函数重载。


本期博客到这又要结束了,下期会继续对C++入门知识的讲解

敬请期待~

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

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

相关文章

MoCo解读

MoCo方法由何凯明团队提出&#xff0c;是无监督对比学习的代表作。经过MoCo预训练的视觉表征迁移到各种下游任务时&#xff0c;其效果超过了有监督预训练模型。 两点创新 对比学习的思想是将相似的样本距离拉近&#xff0c;不相似的样本距离拉远。对比学习主要在两方面进行设计…

JavaEE13-MyBatis查询数据库

前言&#xff1a;前面已经学习了Spring,Spring Boot,Spring MVC这3个框架&#xff0c;接下来学习第4个框架MyBatis(国内)&#xff1a;将前端传递的数据存储起来(前身IBatis)或者查询数据库里面的数据。PS&#xff1a;不同版本号区别3.5.1 -> 3.5的第一个版本3.5.10 -> 3.…

命令执行利用

数据来源 01 命令执行漏洞 命令执行漏洞- 例子1&#xff08;无防御&#xff09; 示例&#xff1a;&#xff08;我这里使用dvwa靶场做演示&#xff09; 解决靶场响应结果的中文乱码 charsetutf-8&#xff0c;修改为charsetgb2312 把安全等级调到&#xff1a;low&#xff0…

concat函数在mySQL和Oracle中的不同

在mysql中的使用1>.在该函数中传入两个值&#xff1a;22和33,得到结果为两个值的拼接效果如图所示2>.在该函数中传入两个及以上的值&#xff1a;22和33和44,得到结果为多个值的拼接效果如图所示3>.在该函数中传入两个及以上的值&#xff1a;null和22和33&#xff0c;得…

GitHub 上有哪些优秀的项目?

前言 各个领域模块的都整理了一下&#xff0c;包含游戏、一些沙雕的工具、实用正经的工具以及一些相关的电商项目&#xff0c;希望他们可以给你学习的路上增加几分的乐趣&#xff0c;我们直接进入正题~ 游戏 1.吃豆人 一款经典的游戏开发案例&#xff0c;包括地图绘制、玩家控…

车载网络 - BootLoader - CAN/CANFD刷写过程

话接上回,我们继续分享刷写流程。 刷写Boot到RAM(如果ECU中有独立的boot代码,无需执行此段) 9、获取单次刷写的最大长度(参考https://mp.csdn.net/mp_blog/creation/editor/127720716) Request:34 00 44 + 地址 + 长度 Response:74 00 44 + Maxlength 10、进行刷写传…

Netty之DefaultAttributeMap与AttributeKey的机制和原理

为什么要分析DefaultAttributeMap和AttributeKey呢&#xff1f;我自己对Netty也是一个不断的学习过程&#xff0c;从前面几篇Netty分析的博客中&#xff0c;可以看出&#xff0c;Netty是比较博大精深的&#xff0c;很像java.util.concurrent.*包中的源码&#xff0c;如果只是看…

【微电网】微电网的分布式电源优化配置研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

企业工程管理系统源码-专注项目数字化管理

高效的工程项目管理软件不仅能够提高效率还应可以帮你节省成本提升利润 在工程行业中&#xff0c;管理不畅以及不良的项目执行&#xff0c;往往会导致项目延期、成本上升、回款拖后&#xff0c;最终导致项目整体盈利下降。企企管理云业财一体化的项目管理系统&#xff0c;确保项…

关于卷积过程中通道数如何变化问题

以RGB图像为例。 一个12*12的像素图&#xff0c;对其进行5*5的卷积&#xff0c;最后得到一个8*8【计算过程&#xff1a;(12-5)/118】的像素图。 RGB图像有3个通道&#xff08;12*12*3&#xff09;&#xff0c;所以卷积核也要有3个通道&#xff08;5*5*3&#xff09;&am…

第一章 隐私计算科普与解读

前言 提醒&#xff1a;全文10千字&#xff0c;预计阅读时长15分钟&#xff1b;读者&#xff1a;对隐私计算感兴趣的小伙伴&#xff1b;目的&#xff1a;读者利用15~30 分钟对本文沉浸式阅读理解&#xff0c;能够掌握隐私计算 80% 的概念&#xff1b;关键词 &#xff1a;隐私计算…

好用的搜索工具listary

发现一个好工具记录一下。以后好好用起来。 这个工具我安装后&#xff0c;跟着引导教程&#xff0c;学做了一些操作立马就爱上了。 Listary&#xff1a;大幅度提高本地文件浏览与搜索速度效率的「超级神器」 百度安全验证https://baijiahao.baidu.com/s?id17127561426219890…

【Python】基于you-get下载网页视频

文章目录1 前言2 you-get2.1 安装2.2 简单使用2.3 扩展3 下载网页视频3.1 概述3.2 下载网页4 代码1 前言 过年了&#xff0c;想给家里长辈下几首戏曲&#xff0c;于是找到一个发布戏曲的网站&#xff0c;虽然可以通过IDM插件的资源嗅探来一一下载&#xff0c;但是内容太多&…

【JavaScript】数据劫持详解

&#x1f4bb; 【JavaScript】数据劫持 &#x1f3e0;专栏&#xff1a;JavaScript &#x1f440;个人主页&#xff1a;繁星学编程&#x1f341; &#x1f9d1;个人简介&#xff1a;一个不断提高自我的平凡人&#x1f680; &#x1f50a;分享方向&#xff1a;目前主攻前端&#…

这就是传说中超难的N皇后?——详细图解!

✔️本文主题&#xff1a;回溯算法之N皇后 算法 ✔️题目链接&#xff1a;N皇后 详解N皇后一、前言二、题目信息三、解题思路四、参考代码五、结语一、前言 大家好久不见&#xff0c;今天我们一起来学习一道很经典、也很有难度的一道题目——N皇后 二、题目信息 按照国际象棋…

Spring-基础知识二

Spring9.Spring JdbcTemplate的使用9.1 JdbcTemplate入门9.1.1 需要的包9.1.2 代码测试9.2 将数据源和jdbcTemplate交给Spring来管理9.2.1 druid连接池9.2.2 使用外部文件配置数据连接信息9.3 基于JdbcTemplate实现DAO9.Spring的事务管理机制9.1 PlatformTransactionManager 事…

第十章 面向对象编程(高级)

一、类变量和类方法&#xff08;P374&#xff09; 1. 类变量 定义语法&#xff1a; 访问修饰符 static 数据类型 变量名&#xff1b; 类变量也叫静态变量/静态属性&#xff0c;是该类的所有对象共享的变量&#xff0c;任何一个该类的对象去访问它时&…

微服务 热点流控 规则-授权 系统规则 自定义返回

微服务 热点流控 规则-授权 系统规则 自定义返回Sentinel-热点流控操作示例Sentinel规则-授权操作示例Sentinel规则-系统规则Sentinel自定义异常返回Sentinel-热点流控 拿商品举例&#xff0c;当一个商品的查询请求量异常火爆的时候&#xff0c;应该对该商品的查询请求进行限流…

FineReport使用

目录报表命名规范数据集命名规则参数命名规则条件属性命名规则超链接命名规范决策报表组件命名规则普通报表悬浮元素命名规则用户权限模版版本管理FineDB内置数据库外置数据库配置外接数据库新建数据库外接数据库配置入口配置外接数据库数据表权限控制&#xff1a;用户-部门职位…

【JavaEE】锁策略 + synchronized原理 + CAS + JUC下常用类和接口 + 死锁

目录 锁策略 乐观锁VS悲观锁 轻量级锁VS重量级锁 自旋锁VS挂起等待锁 互斥锁VS读写锁 公平锁VS非公平锁 可重入锁VS不可重入锁 synchronized原理 synchronized特性 synchronized优化机制 加锁过程优化 锁消除 锁粗化 CAS CAS概念 CAS原理 CAS应用 自旋锁的实…