初识c++语法(一)

news2024/12/24 8:24:14

    我们在C语言的基础之上进行c++语言的学习。对于我们的c++语言来说,c++兼容C语言,所以我们以前编写的C语言的程序在c++平台上也是可以运行的。唯一不同的就是我们的c++对于我们C语言的部分语法做出了优化以及引入了面向对象的概念。所以在刚开始学习c++的时候我们可以从了解c++新增的语法入手,学习c++语言的特点。

    🌵命名空间域

  我们先来看一段代码:

  我们定义了一个变量名叫做 rand 的变量。我们可以发现程序运行一切正常,但是如果我们再引入一个头文件呢?   我们会发现编译器产生了报错,显示rand变量已经定义为一个函数。我们可以很容易的想到这是和我们stdlib.h库里面的rand函数发生了冲突。但是我们不可能记住所有库中的变量名并在命名的时候加以回避,那么也就代表着我们在定义变量的时候随时都可能会有和库中的变量发生冲突的危险。这是C语言当中隐藏的危险。

  所以我们的c++为了避免出现这种情况引入了命名空间域的概念。对于c++我们会经常看到如下的代码:

  

  我们可以逐步的进行分析:我们第一行引用的iostream我们可以先将其认为是和我们stdio.h类似的头文件。但是我们这个头文件是处于特定的命名空间域当中的,只是单纯的包含这个头文件并不能使用其中的函数,所以我们需要将我们这个命名空间域展开。就有了我们第三行的代码:

using namespace std;

  我们为了方式我们在全局的范围内定义的变量名和我们库函数当中的函数名相冲突所以自己创建了一个命名空间域。所以也就有了:

namespace lm
{
	int rand = 12;
}

  但是我们创建好命名空间域之后并不能直接使用我们在其中定义的变量。我们有两个选择要么向我们展开std的那样展开。但是我们需要注意的是,要是我们将命名空间域展开之后,相当于我们命名的变量会直接出现在全局的范围内,依旧会出现冲突,所以我们在展开命名空间域的时候需要格外小心。所以我们是用另一种形式——使用域作用限定符进行指定域中的变量。也就有了我们的:

printf("%d", lm::rand);

  这么看来我们的命名空间域很实用,并且我们的命名空间域支持嵌套,我们可以在一个命名空间域中嵌套一个新的命名空间域,在使用的时候只需要依次利用域作用限定符将我们的变量名引出即可。

    🌵c++的输入和输出 

   实际上按照我们c++正规的写法来说我们上面的代码应该这样来写:

  我们在main函数当中的输出函数由printf更改为了cout。这是c++当中的输出函数。其优点我们到后面会细细道来。我们先来了解一下cout函数的使用方法:

  我们可以将cout大致理解为我们屏幕上面的黑框框,我们可以将指定的内容输出到我们的黑框框当中,我们在上面也就是将我们lm1命名空间域中的a输出到屏幕上。双箭头表示输出方向,endl表示我们本行输入的结束。

  既然有了输出函数那么一定有输入函数,在c++当中输入函数为:

   我们先使用cout函数在屏幕上打印提示信息,之后使用cin检测用户的输入,最后使用cout将我们输入的x打印出来。由于我们的c++是兼容C语言的所以我们可以将我们的cin,cout,printf,scanf搭配起来使用。样例如下:

  需要注意的是,虽然我们的printf函数可以和cout混合使用,但是效率方面会有些许减慢,所以我们在使用的时候尽量不要掺杂使用。

  同时我们的cout函数会自动检测并识别类型,也就是说我们在使用cout函数向屏幕输出的时候,不需要指定格式输出,代码如下:

      🌵c++的缺省函数

  在我们的c++语言当中还支持缺省函数的概念。我们先来通过一段代码体会一下缺省函数的概念:   就像我们上面的代码所展示的那样,我们可以在定义函数时候给我们的参数定义一个默认值,这样假如我们在使用函数的时候可以选择只传入一个参数,另一个参数会自动默认会定义的值。我们也可以向函数中传入两个值。代码如下:

  缺省函数分为两种全缺省函数和半缺省函数,半缺省函数就像是我们上面的代码一样,全缺省的代码如下:

  在这里需要我们注意的是:我们在选择半缺省的时候,缺省的值必须在后面,否则系统可能会报错。还有我们在向函数传值的时候不能跳过数据进行传参,否则系统也会报错。

  前半部分缺省报错:

   跳过参数传参报错:

   和python语言不同的是我们这里的缺省函数不能指定参数传参,否则也会报错:

     🌵c++函数重载

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

  我们首先通过两个简单的函数来体会一下函数重载:

  在C语言当中我们的编译器并不支持同名的函数,但是我们的c++将这一点优化之后,可以支持我们的同名但是参数的形式不同的函数。这种参数不同但是函数名相同的函数成为函数的重载。在这里需要我们注意的是:当我们的形参列表相同但返回值不同时不构成重载,否则会编译出错。

  有一个特殊的情况:根据定义当我们有一个全缺省函数和我们的无参数的函数构成重载的时候在编译上会通过。   但是当我们在使用函数缺省的时候就会出现解释歧义的现象,进而产生报错:

   在介绍完c++的重载之后我们肯定会想:为什么C语言不支持函数重载,c++就可以支持函数重载呢?c++又是怎样支持函数的重载的呢?

  我们先来给定一个正确的答案,再来进行详细的解释:我们的c++语言在编译链接的过程当中会通过函数名修饰规则支持重载。

  我们先从编译器的编译链接的过程来解释这一答案:

     通过汇编代码我们可以发现在我们的C语言当中产生的汇编指令如下:

   我们的函数名表示的形式仅仅是我们定义出来的函数名,所以当我们定义两个相同的函数名的时候就出现同一个函数名对应多个函数地址的情况,进而产生歧义。而我们再来看我们c++的汇编代码的形式:

   我们可以发现的是我们在汇编当中产生的函数名并不只我们定义的函数名,他会通过一种特定的形式加以修饰。在我们的gcc编译器下所进行的修饰为把我们的参数的所写添加到我们的函数名当中,这样定义不同的参数的同名函数所最终找到的地址就不同了。也就不会产生歧义了。这也就是我们函数重载的原理。

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

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

相关文章

免费馅饼(牛客刷dp)

免费馅饼 比赛主页 我的提交 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 SERKOI最新推出了一种叫做“免费馅饼”的游戏:游戏在一个舞台上进行。舞台的宽度为W格&#…

D. Color with Occurrences(Codeforces Round 811 (Div. 3))

https://codeforces.com/contest/1714/problem/D 题目大意 给定一个字符串 t t t 和一组字符串 s 1 , s 2 , … , s n s_1, s_2, \ldots, s_n s1​,s2​,…,sn​。每次操作可以选择其中一个字符串 s i s_i si​,将 t t t 中所有 s i s_i si​ 的出现位置染…

管理后台项目-04-SPU列表-增删改SPU-获取SKU【续】

目录 1-删除spu 2-添加sku 2.1-获取skuForm页面组件的数据 2.2-收集form表单数据 2.3-保存提交数据 3-查看SKU信息和loading效果 上一篇文章管理后台项目-03-SPU列表-增删改SPU-获取SKU_ycmy2017的博客-CSDN博客内容较多,交互逻辑有点复杂,所以分两…

微风·六·JAVA中“==”、hashcode、equals及字符串常量池的区别

vector线程安全的集合 hashset底层为hashmap 文章目录 1 “”和equals的区别是什么?1.1 “”解释1.2 “equals”解释1.3 注意点:equals不能比较基本数据类型1.4 Integter缓存数组1.4.1 引入案例发现问题1.4.2 解释缓存数组 1.5 字符串常量池1.5.1 案例一1.5.2 案例…

视频直播网站开发的最佳实践

随着互联网技术的不断发展,视频直播成为了网络世界中的一股热潮。无论是企业还是个人,都可以通过搭建自己的视频直播网站来实现自己的目标。但是,对于很多企业来说,视频直播网站的开发是一项复杂的任务。因此,本文将介…

响应式开发(HTML5CSS3)实现媒体查询的功能案例

目录 前言 一、媒体查询知识点 二、实现功能的尺寸 三、代码部分 1.不带嵌套的媒体查询功能 1.1.代码段 1.2.运行结果 2.带嵌套的媒体查询功能 2.1.代码段 2.2.运行结果 2.2.3视频效果 前言 1.本文讲解的响应式开发技术(HTML5CSS3Bootstrap&#xff09…

C语言开发环境搭建及调试

C简介 可移植 标准C C/C (系统硬件操作的接口,windows,Linux不一样) 跨平台 Java Python 下载 去官网选择Visual Studio 2019下载 安装过程中勾选使用C的桌面开发 安装好之后点击创建新项目——空项目 位置最好放在根目录下&…

从数据管理到数据资产管理

数据已经与土地、劳动力、资本、技术并称为五种生产要素,数据的价值是毋庸置疑的。数据甚至成为了国家的基础性战略资源,数字经济也正在成为经济增长的强大创新动力。那么—— 数据到底指的是什么? 数据管理又是怎么回事? 数据如何…

Django项目之经济预测平台,应用LSTM、GBDT等算法

一、平台功能与技术点 1.技术点:Python3.9、Django4.1.7, tensorflow2.11.0,keras2.11.0,numpy1.24.2、bootstrap、ajax、MySQL等等 2.功能:正常前后端,前台主要完成经济预测功能(特征和标签都…

✨✨✨ ❃ ♕ ꕥXpath解析html获取表情符号,丰富你的文章 ꧁ ꧂꧁ ꧂

✨✨✨ ❃ ♕ ꕥXpath解析html获取表情符号,丰富你的文章 ꧁ ꧂꧁ ꧂ 1. 推荐几个好玩的表情符号网站2. xpath解析html获取表情3. xpath解析html源码3.1 parse_li.py3.2 symbol2.html 参考 1. 推荐几个好玩的表情符号网站 💕 🧚 &#x1f6b…

SPDK软件栈基础概念

SPDK SPDK软件架构SSD和SPDK中controller和nsSPDK RPC (一)driverSPDK virtio-PCIe 和 vhost-user (二)Storage Services(存储设备)对象存储SPDK BlobStore&BlobFS SPDK 块设备驱动块设备驱动层的其他模块 (三&…

KMP字符串匹配算法详解

目录 简单的暴力匹配算法KMP算法next数组next数组的优化 简单的暴力匹配算法 对于字符串的匹配通常是给出一个主串str和一个模式串sub,然后在主串pos位置开始匹配,如果能在str中找到sub那么就返回sub在str中首次出现的首个字符的下标,否则返…

地球系统模式(CESM)

目前通用地球系统模式(Community Earth System Model,CESM)在研究地球的过去、现在和未来的气候状况中具有越来越普遍的应用。CESM由美国NCAR于2010年07月推出以来,一直受到气候学界的密切关注。近年升级的CESM2.0在大气、陆地、海…

【论文笔记】VideoGPT: Video Generation using VQ-VAE and Transformers

论文标题:VideoGPT: Video Generation using VQ-VAE and Transformers 论文代码:https://wilson1yan. github.io/videogpt/index.html. 论文链接:https://arxiv.org/abs/2104.10157 发表时间: 2021年9月 Abstract 作者提出了…

git 常用命令及遇到问题

自己没事,把git常用命令做个记录总结。方便自己和初学者查看,本文针对初学者,如果你已经是工作多年高手,请跳过。 git的几个区认识,分别为工作区,缓存区,版本库。 工作区:包含.git…

靶机精讲:BNE0x03Simple

主机发现 nmap扫描 端口扫描 服务扫描 脚本扫描 第二十页路径有目录 web渗透 搜索该版本漏洞 CuteCMS漏洞利用 下载下来 查看文件,发现是远程文件上传漏洞 按步骤进行注册 点进去 构造利用文件,反弹shell 最后语法错误应为0>1 尝试上传 根据漏洞扫…

实验04:图像压缩(DP算法)

1.实验目的: 掌握动态规划算法的基本思想以及用它解决问题的一般技巧。运用所熟悉的编程工具,运用动态规划的思想来求解图像压缩问题。 2.实验内容: 给定一幅图像,求解最佳压缩,使得压缩后的文件最小。 3.实验要求…

容易忽视的细节:Log4j 配置导致的零点接口严重超时

作者:vivo 互联网服务器团队- Jiang Ye 本文详细的记录了一次0点接口严重超时的问题排查经历。本文以作者自身视角极具代入感的描绘了从问题定位到具体的问题排查过程,并通过根因分析并最终解决问题。整个过程需要清晰的问题排查思路和丰富的问题处理经验…

大话数据结构-查找

1 查找概论 查找表(Search Table)是由同一类型的数据元素(或记录)构成的集合,如下所示:   关键字(Key)是数据元素中某个数据项的值,又称为键值,用它可以标…

LiteFlow规则引擎的入门

文章目录 1、LiteFlow简介2、解决的痛点3、快速开始3.1 引入依赖3.2 配置规则文件的位置3.3 定义组件3.4 指定规则3.5 编写客户端3.6 运行以及说明3.7 其他的组件 4、对于快速开始的思考5、LiteFlow的脚本组件5.1 脚本的定义5.2 脚本的使用5.3 关于脚本使用的思考 6、规则引擎的…