【C++入门】 初见,单推,与C++的第一次约会

在这里插入图片描述关注小庄 顿顿解馋(ᕑᗢᓫ∗)˒


引言:本篇博客我们开始与C++的第一次约会,C++是兼容c的,本篇博客我们将了解到C++关键字有哪些,C++命名空间,C++输入与输出和缺省参数的内容,请放心食用 ~

文章目录

  • 一 🏠 C++关键字
  • 二 🏠 C++命名空间
    • 👿 命名空间的定义
    • 👿 命名空间的使用
      • 📒 加命名空间名称及作用域限定符
      • 📒 展开命名空间
      • 📒 指定展开空间的某一个
  • 三 🏠 C++输入与输出
    • 👿 cout和cin
    • 关于std命名空间
  • 四 🏠 缺省参数
    • 👿 缺省参数的概念
    • 👿 缺省参数的分类

一 🏠 C++关键字

C++跟C语言一样也有属于它自己关键字,但是由于C++兼容c,关键字中有些是我们的老朋友,有些是新朋友,我们可以在后期慢慢了解
在这里插入图片描述

二 🏠 C++命名空间

我们首先看这样的一段代码

#include<stdlib.h>
#include<stdio.h>
int rand = 0;

int main()
{
   printf("%d",rand);
   return 0;
}

这段代码能否正常输出这个全局变量rand的值呢?

答案是否定的,这是因为我们包含了rand函数的头文件,他和rand变量都在全局域中,这导致编译器懵逼了会起冲突。

这里我们补充一个知识点:我们在用变量/函数..时,编译器默认查找顺序是1.局部域 2.全局域

那有什么解决之法呢 ? C++ 给了一个新技术叫做 命名空间(namespace)

👿 命名空间的定义

  • 语法
namespace 空间名
{
   int rand = 10; // 定义变量
   int Add(int x,int y)
   {
     return x + y;
   } //定义函数
   struct Node
   {
   }; //定义类型
} //注意这里没有分号 ! !

命名空间里可以定义变量,函数,类型

// test.cpp
namespace N1
{
int a;
int b;
int Add(int left, int right)
 {
     return left + right;
 }
namespace N2
 {
     int c;
     int d;
     int Sub(int left, int right)
     {
         return left - right;
     }
 }
}

命名空间也可以嵌套命名空间,有什么使用场景呢?

namespace bit
{
	namespace f
	{
		void Add(int x, int y)
		{
			cout << 2*x + y << endl;
		}
	}

}
namespace f
{
	int x;
	void Add(int x, int y)
	{
		cout << x + y << endl;
	}
	struct Node
	{
	};
}
int main()
{
	bit::f::Add(1, 2);
	f::Add(1, 2);
	return 0;
}

如上代码 当你想用两个同名命名空间里的东西时,就可以嵌套命名空间。

//test.h
#include<iostream>
using namespace std;
namespace f
{
	void Sub(int x ,int y)
	{
		cout << x - y << endl;
	}
}
//test.cpp
namespace f
{
	int x;
	void Add(int x, int y)
	{
		cout << x + y << endl;
	}
	struct Node
	{
	};
}
#include"test.h"
int main()
{
	bit::f::Add(1, 2);
	f::Add(1, 2);
	f::Sub(1, 2);
	return 0;
}

输出结果:3 -1 可以正常编译

我们可以发现:同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

👿 命名空间的使用

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

:: 是C++中的作用域限定符,左边没东西默认访问全局

namespace f
{
	int x = 2;;
	void Add(int x, int y)
	{
		cout << x + y << endl;
	}
	struct Node
	{
	};
}
int x = 0;
int main()
{
	cout << ::x << endl;//使用全局的
	bit::f::Add(1, 2); //使用嵌套命名空间的函数
	cout << f::x << endl;//使用命名空间定义的变量
	f::Add(1, 2); //使用命名空间定义的函数
	struct f::Node pnode;//使用命名空间定义的类型
	return 0;
}

📒 展开命名空间

命名空间的本质是定义一个命名空间域展开命名空间实际是增加编译器查找的顺序,除了在局部域和全局域找还在命名空间域找,它实际是一个声明,声明你可以访问这块空间

using namespce N;
int main()
{
    printf("%d\n", N::a);
    printf("%d\n", b);
    Add(10, 20);
    return 0;    
}

对于代码中的b,由于展开了命名空间,先在局部域找,没找到再在全局域,最后在再在命名空间域里找

namespace f1
{
 int val = 0;
}
namespace f2
{
  int val = 1;
}
using namespace f1;
using namespace f2;
cout << val << endl;

代码不能正常编译

注意:展开多个命名空间时,空间里有同名的会起冲突,所以尽量不要随意展开!!

📒 指定展开空间的某一个

namespace N
{
int b = 0;
}
using N::b;
int main()
{
    printf("%d\n", b);
    return 0;    
}

如果我们要解决上面的问题可不可以代码是这样的?

namespace N
{
int rand = 0;
}
using N::rand;
int main()
{
    printf("%d\n", b);
    return 0;    
}

在这里编译器会报错,原因是展开指定中的某一个实际是一个声明,声明你可以访问这块命名空间里的rand,但是会与全局域的rand函数冲突,编译器不知道到底要用哪个rand

printf("%d\n", N::b);

这种写法明确告诉你要访问的是N这个命名空间里的rand

注意:命名空间域并不会改变生命周期

三 🏠 C++输入与输出

我们的C++祖师爷对C语言的输入和输出函数感到不足,所也设计了新的输入和输出函数

👿 cout和cin

std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中

#include<iostream>
using namespace std;
 int a;
   double b;
   char c;
   // 可以自动识别变量的类型
   cin>>a;
   cin>>b>>c;
   cout << a << "" << b <<endl<<'\n'
   //换行可以使用endl或‘\n’

注意:

  1. <<是流插入运算符,>>是流提取运算符
  2. cin 和 cout 可以自动识别类型
  3. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含< iostream >头文件中。
  4. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。

使用cout

//1.
using nampspace std;
//2.
std::cout
//3.
using std:: cout;
using std::endl;

关于std命名空间

我们前面说了最好不要随意展开命名空间,这是必须的吗?

  1. 在日常练习中,建议直接using namespace std即可,这样就很方便
  2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模大,就很容易出现。所以建议在项目开发中使用.

四 🏠 缺省参数

👿 缺省参数的概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。

void Func(int a = 0)
{
 cout<<a<<endl;
}
int main()
{
 Func();     // 没有传参时,使用参数的默认值
 Func(10);   // 传参时,使用指定的实参
return 0;
}

输出:
0
10

如果没有指定实参则采用该形参的缺省值,否则使用指定的实参

👿 缺省参数的分类

  • 全缺省参数
    指的是给每个形参一个默认值
void Func(int a = 10, int b = 20, int c = 30)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }
 Func(1,2,3); //输出1 2 3
 Func(1,2);//1 2 30
 Func(1);//1 20 30
 //不能是Func(1,,3);
  • 半缺省参数
    指的是给一部分缺省参数
void Func(int a, int b = 10, int c = 20)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }
 //不能在函数和声明同时缺省
  //a.h
  void Func(int a = 10);
  
  // a.cpp
  void Func(int a = 20)
 {}

注意:

  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
  2. 缺省参数不能在函数声明和定义中同时出现(如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值)
  3. 缺省值必须是常量或者全局变量
  4. C语言不支持

应用场景:比如我们给链表扩容时如果知道要扩多少直接给形参,不知道就用缺省参数作为指导扩容值.


看完不妨给个一键三连呀 ~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s入门到实战(七)—— 回顾:使用yaml文件配置pv、pvc、configmap部署mysql服务

实战&#xff1a;部署 mysql 服务 回顾加深 pv、pvc、configmap 删除所有 deployment、pv、pvc、configmap、StorageClass创建一个 nsf 挂载目录给 mysql mkdir -p /nfs/data/mysql创建 yaml 文件mysql-server.yaml # 创建pv apiVersion: v1 kind: PersistentVolume metadat…

【深度学习】最强算法模型之:潜在狄利克雷分配(LDA)

潜在狄利克雷分配 1、引言2、潜在狄利克雷分配2.1 定义2.2 原理2.3 算法公式2.4 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 给我讲一讲LDA 小鱼&#xff1a;LDA&#xff1f; 你指的是&#xff1f; 小屌丝&#xff1a;就是算法模型的LDA啊&#xff0c; 你…

剑指Offer题目笔记19(二分查找)

面试题68&#xff1a; 问题&#xff1a; ​ 输入一个排序的整形数组nums和一个目标值t&#xff0c;如果数组nums中包含t&#xff0c;则返回在数组中的下标&#xff0c;否则返回按照顺序插入到数组的下标。 解决方案&#xff1a; ​ 使用二分查找。每次二分查找都选取位于数组…

【学习】软件科技成果鉴定测试有何作用

软件科技成果鉴定测试是针对软件进行项目申报、科技成果鉴定等相关目的进行的测试。软件测试报告可作为项目申报、科技成果鉴定等工作的依据之一。软件类科技成果鉴定测试从软件文档、功能性、使用技术等方面对软件系统进行符合性测试。其测试结果证明软件的质量是否符合技术合…

[DS]Polar靶场web(一)

静以养心&#xff0c;宽以养气。 跟着Dream ZHO大神学专升安的一天 swp 直接dirb扫出.index.php.swp的目录 function jiuzhe($xdmtql){return preg_match(/sys.*nb/is,$xdmtql);//如果包含以 "sys" 开始&#xff0c;后跟任意字符直到 "nb" 的字符串&…

基于Rflysim平台的无人机拦截三维比例导引算法仿真

【后厂村路钢铁侠出品】 一、Rflysim简介 RflySim是一套专为科研和教育打造的Pixhawk /PX4 和MATLAB/Simulink生态系统或工具链&#xff0c;采用基于模型设计&#xff08;Model-Based Design&#xff0c; MBD&#xff09;的思想&#xff0c;可用于无人系统的控制和安全测试。…

勾八头歌之分类回归聚类

一、机器学习概述 第1关机器学习概述 B AD B BC 第2关常见分类算法 #编码方式encodingutf8from sklearn.neighbors import KNeighborsClassifierdef knn(train_data,train_label,test_data):input:train_data用来训练的数据train_label用来训练的标签test_data用来测试的数据…

超级会员卡积分收银系统源码:积分+收银+商城三合一小程序 带完整的安装代码包以及搭建教程

信息技术的迅猛发展&#xff0c;移动支付和线上购物已经成为现代人生活的常态。在这样的背景下&#xff0c;商家对于能够整合收银、积分管理和在线商城的综合性系统的需求日益强烈。下面&#xff0c;罗峰给大家分享一款超级会员卡积分收银系统源码&#xff0c;它集积分、收银、…

什么是RISC-V?开源 ISA 如何重塑未来的处理器设计

RISC-V代表了处理器架构的范式转变&#xff0c;特点是其开源模型简化了设计理念并促进了全球community-driven的开发。RISC-V导致了处理器技术发展前进方式的重大转变&#xff0c;提供了一个不受传统复杂性阻碍的全新视角。 RISC-V起源于加州大学伯克利分校的学术起点&#xff…

计算机视觉之三维重建(4)---三维重建基础与极几何

文章目录 一、三维重建基础1.1 问题引入1.2 线性解法1.3 非线性解法1.4 多视图几何的关键问题 二、极几何与基础矩阵2.1 极几何2.2 极几何特例2.3 本质矩阵2.4 本质矩阵的性质2.5 基础矩阵2.6 基础矩阵的性质 三、基础矩阵估计 一、三维重建基础 1.1 问题引入 1. 从单张图像恢…

蓝桥杯刷题之路径之谜

题目来源 路径之谜 不愧是国赛的题目 题意 题目中会给你两个数组&#xff0c;我这里是分别用row和col来表示 每走一步&#xff0c;往左边和上边射一箭&#xff0c;走到终点的时候row数组和col数组中的值必须全部等于0这个注意哈&#xff0c;看题目看了半天&#xff0c;因为…

Win11电脑cpu温度过高怎么办呢

Win11电脑cpu温度过高怎么办呢&#xff1f;有时候我们感觉电脑发烫&#xff0c;担心电脑过烫会不会损坏。正常情况下&#xff0c;cpu的温度在45~65度之间&#xff0c;但不排除电脑同时开了太多软件&#xff0c;或者在玩吃鸡、英雄联盟等的大型游戏而导致温度超过85度。只要最高…

excel设置数字下拉递增方法

excel数字下拉递增怎么设置&#xff1f;在我们平常表格的编辑中&#xff0c;不可避免的会需要有这样“1、2、3、4”的序列排序下来&#xff0c;但为了可以更加节省时间提高工作效率&#xff0c;我们可以设置下拉数字递增哦&#xff0c;还在一个一个手动输入的朋友们&#xff0c…

数据结构——线性表(一)

线性表&#xff0c;顾名思义&#xff0c;是具有像线一样的性质的表。如同学生们在操场上排队&#xff0c;一个跟着一个排队&#xff0c;有一个打头&#xff0c;有一个收尾&#xff0c;在其中的学生都知道前一个是谁&#xff0c;后一个是谁&#xff0c;这样就像一根线将他们都串…

JWT(JSON Web Token)

JSON Web Token 是一种开放标准&#xff0c;用于在网络上安全传输信息的简洁、自包含的方式。它通常被用于身份验证和授权机制。 JWT 由三部分组成&#xff1a;头部&#xff08;Header&#xff09;、载荷&#xff08;Payload&#xff09;和签名&#xff08;Signature&#xff…

【深度学习】【机器学习】用神经网络进行入侵检测,NSL-KDD数据集,基于机器学习(深度学习)判断网络入侵

文章目录 下载数据集NSL-KDD数据集介绍输入的41个特征输出的含义数据处理&&训练技巧建神经网络&#xff0c;输入41个特征&#xff0c;输出是那种类别的攻击模型训练模型推理写gradio前端界面&#xff0c;用户自己输入41个特征&#xff0c;后端用模型推理计算后显示出是…

linux环境gitlab迁移到新服务器

目录 备份项目备份gitlab配置阿里云磁盘格式化准备 最近服务器中了挖矿病毒&#xff0c;清理几次&#xff0c;都没有搞定&#xff0c;只能重新安装gitlab 备份项目 先把项目备份到本地 git pull git remote prune origin确保本地代码是最新的并且拥有所有的分支 git remote …

自然语言处理3(NLP)—— 机器学习

1. 自然语言处理在机器学习领域的主要任务 自然语言处理&#xff08;NLP&#xff09;在机器学习领域中扮演着至关重要的角色&#xff0c;旨在使计算机能够理解、解释和生成人类语言。以下是NLP在机器学习领域中的主要任务及其分类方法&#xff1a; 1.1 按照功能类型分类 1.1.…

学习可视化比较好用的网站Apache ECharts

Apache ECharts 是一个基于 JavaScript 的开源可视化图表库&#xff0c;它提供了直观、交互丰富且可高度个性化定制的数据可视化图表。这个库最初由百度团队开源&#xff0c;并在 2018 年初捐赠给了 Apache 基金会&#xff0c;成为 ASF 的孵化级项目。在 2021 年 1 月 26 日&am…

Hadoop+Spark大数据技术 第三次作业

第三次作业 1.简述HDFS Shell三种操作命令hadoop fs、hadoop dfs、hdfs dfs的异同点。 相同点 用于与 Hadoop 分布式文件系统&#xff08;HDFS&#xff09;交互。可以执行各种文件系统操作&#xff0c;如文件复制、删除、移动等。 不同点 hadoop fs、hadoop dfs已弃用&#xf…