【C++】C++ 入门 — 命名空间,输入输出,函数新特性

在这里插入图片描述

C++

  • 1 前言
  • 2 命名空间
    • 2.1 概念引入
    • 2.2 开始使用
    • 2.3 投入应用
  • 3 输入与输出
    • 3.1 基础知识
    • 3.2 开始使用
    • 3.3 注意局限
  • 4 函数新特性
    • 4.1 缺省参数
      • 4.1.1 开始使用
      • 4.1.2 注意事项
    • 4.2 函数重载
      • 4.2.1 开始使用
      • 4.2.2 如何实现
  • Thanks♪(・ω・)ノ谢谢阅读
  • 下一篇文章见!!!

1 前言

本文章是我对C++学习的开始,很荣幸与大家一同进步。
首先我先介绍一下C++,C++是上个世纪为了解决软件危机所创立 的一项面向对象的编程语言(OOP思想)。
1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计
在这里插入图片描述
根据今年一月TIOBE公布的排行榜,C++依然稳居前三,可见这是一款非常优秀的编程语言

2 命名空间

2.1 概念引入

在C语言中我们时常遇见这样的冲突:
在这里插入图片描述
重定义!!!总是不小心定义相同变量,多人操作的时候很难避免这个问题。
于是C++为了避免这类问题,引入了“命名空间”的概念;
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的

2.2 开始使用

如活动定义一个命名空间呢?这里需要使用namespace关键字

namespace name
{// 命名空间中可以定义变量/函数/类型int a = 0;double add(double a,double b){return a + b;}struct node{int val ;int size;}}

并且可以做到嵌套定义:

namespace name1{namespace name2{//...}
}

注意
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

2.3 投入应用

使用命名空间主要有三种使用方法:
1 加命名空间名称及作用域限定符;
2 使用using将命名空间中某个成员引入;
3 使用using namespace 命名空间名称 引入.
来看第一种:

命名空间名称及作用域限定符

#include<iostream>
//定义两个命名空间
namespace name1 {int a = 0;
}
namespace name2 {int a = 0;
}int main() {
//使用 作用域限定符 ::name1::a = 1;name2::a = 1;return 0;
}

使用using将命名空间中某个成员引入

#include<iostream>
//定义两个命名空间
namespace name1 {int a = 0;int b = 0;
}
//只有引入的变量才可以省略 命名空间和 作用域符号;
using namespace name1::a;int main() {
//使用 作用域限定符 ::a = 1;name :: b = 2;return 0;
}

使用using namespace 命名空间名称 引入

#include<iostream>
//定义两个命名空间
namespace name1 {int a = 0;int b = 0;
}
//引入命名空间后,其中的变量/函数/结构体 
//可以直接使用
using namespace name1;int main() {a = 1;b = 2;return 0;
}

3 输入与输出

c++中的输入输出与C语言略有不同。来看样例

#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{cout<<"Hello world!!!"<<endl;return 0;
}

运行效果
在这里插入图片描述

3.1 基础知识

  1. 使用cout标准输出对象(控制台)和cin 标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含头文件中。
  3. <<是流插入运算符,>>是流提取运算符。
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型
  5. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,这些知识后续才会学习,所以这里只是简单学习如何使用。后面我们更深入的学习IO流用法及原理。

3.2 开始使用

我们来看样例:

#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{char a = 0;int b;float c = 0;cin >> a;//支持连续输入,并自动识别类型。cin >> b >> c;cout << "输出\n" << a << '\n' << b << '\n' << c << '\n' << endl;return 0;
}

运行效果:
在这里插入图片描述

这方面就比C语言的printf scanf等函数方便许多。

3.3 注意局限

大家也一定注意到了一点,c++中既然直接使用了变量名输出,那如何控制输出格式呢?答案是有办法实现的,就是比较复杂。所以我们直接使用C语言<stdio.h>中的printf函数即可,毕竟c++兼容绝大部分的C语言。

4 函数新特性

4.1 缺省参数

4.1.1 开始使用

缺省参数的概念十分好理解,就是在函数定义中加入参数的默认值,并且在没有传入对应参数时,使用默认值。
来看样例:

// 全缺省
using namespace std;void Func(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}int main()
{//半缺省 Func(1, 2, 3) ;Func(1, 2);Func(1);//全缺省Func();return 0;
}

来看运行效果:
在这里插入图片描述

4.1.2 注意事项

  1. 一定注意缺省参数是从左向右传入参数,无法做到传入指定参数。
  2. 缺省参数不能在函数声明和定义中同时出现(如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。所以我们一般在声明中给入默认值,这样方便使用、检查错误等操作)
  3. 缺省值必须是常量或者全局变量
  4. C语言不支持(编译器不支持)

4.2 函数重载

4.2.1 开始使用

在C语言中我们无法实现同一个函数名返回不同类型值或者使用不同类型参数。
所以就导致简单的加和函数Add 如果要实现不同类型的加和不免会出现:
AddInt
AddFloat
AddChar
···
不仅繁琐,而且调用的时候也不方便。

在自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载
c++ 于是就引入了函数重载的概念。
来看样例:

#include<iostream>using namespace std;
int Add(int a = 0, int b = 0) {return a + b;
}
double Add(double a = 0.0, int b = 0) {return a + b;
}
int main() 
{cout << Add(1, 2) << endl;cout << Add(3.14, 2) << endl;return 0;
}

来看运行效果:
在这里插入图片描述

4.2.2 如何实现

那么这么强大的函数重载是如何实现的呢???
答案就在汇编代码中
在c++中,对于一个函数的储存与C语言不同,C++使用了更加具体命名方式(具体要看编译器);我个人非常喜欢g++的形式。上面两个函数分别为:
_Z3Addii
_Z3Adddi
目前我还没有能力深入讲解其中的道理。

Thanks♪(・ω・)ノ谢谢阅读

下一篇文章见!!!

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

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

相关文章

go-zero 全局异常处理-全局中间件

1、在主入口新增 package mainimport ("flag""fmt""go/application/internal/config""go/application/internal/handler""go/application/internal/middleware""go/application/internal/svc"manage "go/pk…

Hive常见问题汇总

Hive和Hadoop的关系 Hive 构建在 Hadoop 之上&#xff0c; HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成的 所有的数据都是存储在 Hadoop 中 查询计划被转化为 MapReduce 任务&#xff0c;在 Hadoop 中执行&#xff08;有些查询没有 MR 任务&#xff0c;如&…

Linux使用二进制包安装MySQL

目录 一、软件包下载 二、上传软件包到Linux根目录 1、使用xftp将软件包上传到根目录 2、解压缩 三、准备工作 四、初始化软件 五、设置MySQL的配置文件 六、配置启动脚本 一、软件包下载 官网下载&#xff1a;MySQL :: Download MySQL Community Server 二、上传软件…

数学知识第三期 欧拉函数

前言 相信大家在高中的时候接触过欧拉函数&#xff0c;希望大家通过本篇文章能够进一步理解欧拉函数&#xff01;&#xff01;&#xff01; 一、什么是欧拉函数&#xff1f; 欧拉函数是一个在数论中用于描述特定正整数的互质数的概念。具体来说&#xff0c;对于一个正整数n&…

Spring扩展点在微服务应用(待完善)

ApplicationListener扩展 nacos注册服务&#xff0c; 监听容器发布事件 # 容器发布事件 AbstractAutoServiceRegistration#onApplicationEvent # 接收事件吗&#xff0c;注册服务到nacos NacosServiceRegistry#register Lifecycle扩展 #订阅服务实例更改的事件 NamingService#…

Python环境下基于机器学习的NASA涡轮风扇发动机剩余使用寿命RUL预测

本例所用的数据集为C-MAPSS数据集&#xff0c;C-MAPSS数据集是美国NASA发布的涡轮风扇发动机数据集&#xff0c;其中包含不同工作条件和故障模式下涡轮风扇发动机多源性能的退化数据&#xff0c;共有 4 个子数据集&#xff0c;每个子集又可分为训练集、 测试集和RUL标签。其中&…

文心一言 VS ChatGPT :谁是更好的选择?

前言 目前各种大模型、人工智能相关内容覆盖了朋友圈已经各种媒体平台&#xff0c;对于Ai目前来看只能说各有千秋。GPT的算法迭代是最先进的&#xff0c;但是它毕竟属于国外产品&#xff0c;有着网络限制、注册限制、会员费高昂等弊端&#xff0c;难以让国内用户享受。文心一言…

Django从入门到精通(一)

目录 一、Django环境搭建与命令 1.1、安装 1.2、命令行 创建项目 编写代码 运行 app概念 1.3、Pycharm创建项目 1.4、虚拟环境 创建虚拟环境 - 命令行 介绍 操作 基本问题 Pycharm 项目虚拟环境 django虚拟环境【安装django最新版本】 django虚拟环境【安装指…

文件包含漏洞长度截断

长度截断 文件漏洞的利用方式什么是长度截断通过实操理解00截断对版本要求更高一点&#xff0c;而长度截断则是利用了windows的系统漏洞&#xff0c;就是windows文件名&#xff08;就是文件名后缀之后&#xff09;之后如果有空格&#xff0c;或者是点都会被忽略掉&#xff0c;也…

【GitHub项目推荐--游戏模拟器(switch)】【转载】

01 任天堂模拟器 yuzu 是 GitHub 上斩获 Star 最多的开源 Nintendo Switch 模拟器 &#xff0c;使用 C 编写&#xff0c;考虑到了可移植性&#xff0c;该模拟器包括 Windows 和 Linux 端。 如果你的 PC 满足必要的硬件要求&#xff0c;该模拟器就能够运行大多数商业游戏&…

Leetcode 第 111 场双周赛题解

Leetcode 第 111 场双周赛题解 Leetcode 第 111 场双周赛题解题目1&#xff1a;2824. 统计和小于目标的下标对数目思路代码复杂度分析 题目2&#xff1a;2825. 循环增长使字符串子序列等于另一个字符串思路代码复杂度分析 题目3&#xff1a;2826. 将三个组排序思路代码复杂度分…

Jenkins上跑自动化项目,case出现错误时,导致项目运行时间过长,该如何处理?

1、方案一&#xff1a;Jenkins上调整 进入配置&#xff1a; 构建环境&#xff1a; 自行选择超时时间即可&#xff5e; 2、方案二&#xff1a;代码调整【python】 安装插件&#xff1a;pytest-timeout 选择一&#xff1a;装饰器用法&#xff1a;将单个测试用例标记为超时&…

Linux之安装配置CentOS 7

一、CentOS简介 CentOS&#xff08;Community Enterprise Operating System&#xff0c;中文意思是社区企业操作系统&#xff09;是Linux发行版之一&#xff0c;它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码&#xff0c…

Linux/Academy

Enumeration nmap 首先扫描目标端口对外开放情况 nmap -p- 10.10.10.215 -T4 发现对外开放了22,80,33060三个端口&#xff0c;端口详细信息如下 结果显示80端口运行着http&#xff0c;且给出了域名academy.htb&#xff0c;现将ip与域名写到/et/hosts中&#xff0c;然后从ht…

Procexp64.exe —— 强大的进程管理器

1&#xff0c;简介 Process Explorer 是一款增强型的任务管理器&#xff0c;你可以使用它方便地管理你的程序进程&#xff0c;能强行关闭任何程序。 除此之外&#xff0c;它还详尽地显示计算机信息&#xff1a;CPU、内存使用情况&#xff0c;DLL、句柄信息&#xff0c;很酷的…

redis-4 搭建redis集群

1.为什么需要redis集群&#xff1f; Redis 集群提供了高可用性、横向扩展和数据分片等功能&#xff0c;使得 Redis 能够应对大规模的数据存储和高并发访问的需求。以下是一些需要使用 Redis 集群的常见情况&#xff1a; 高可用性&#xff1a;通过在多个节点之间进行数据复制和…

【动态规划】【逆向思考】【C++算法】960. 删列造序 III

作者推荐 【动态规划】【map】【C算法】1289. 下降路径最小和 II 本文涉及知识点 动态规划汇总 LeetCode960. 删列造序 III 给定由 n 个小写字母字符串组成的数组 strs &#xff0c;其中每个字符串长度相等。 选取一个删除索引序列&#xff0c;对于 strs 中的每个字符串&a…

虹科数字化与AR部门升级为安宝特AR子公司

致关心虹科AR的朋友们&#xff1a; 感谢您一直以来对虹科数字化与AR的支持和信任&#xff0c;为了更好地满足市场需求和公司发展的需要&#xff0c;虹科数字化与AR部门现已升级为虹科旗下独立子公司&#xff0c;并正式更名为“安宝特AR”。 ”虹科数字化与AR“自成立以来&…

React中文官网已经搬迁了,原网址内容将不再更新

注意1&#xff1a;React中文官网已经搬迁至-React 官方中文文档&#xff0c;原网址内容将不再更新 注意2&#xff1a;React官网已经将React的定义由“用于构建用户界面的 JavaScript 库”更改为“用于构建 Web 和原生交互界面的库”。

SpringBoot系列之JPA实现按年月日查询

SpringBoot系列之JPA实现按年月日查询 通过例子的方式介绍Springboot集成Spring Data JPA的方法&#xff0c;进行实验&#xff0c;要先创建一个Initializer工程&#xff0c;如图&#xff1a; 选择&#xff0c;需要的jdk版本&#xff0c;maven项目 选择需要的maven配置&#x…