【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 3Func(1,2);//1 2 30Func(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.hvoid Func(int a = 10);// a.cppvoid Func(int a = 20){}

注意:

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

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


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

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

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

相关文章

文献阅读工具-->Adobe pdf + 有道词典

Adobe pdf 有道词典 最近一直在考虑用什么文献阅读工具&#xff0c;痛点无非就是想用翻译功能&#xff0c;Adobe pdf的添加注释已经很好用了&#xff0c;使用了zotero&#xff0c;感觉不行&#xff08;不能直接对原文件修改&#xff0c;有副本&#xff0c;麻烦&#xff09;。…

excel匹配替换脱敏身份证等数据

假如excel sheet1中有脱敏的身份证号码和姓名&#xff0c;如&#xff1a; sheet2中有未脱敏的数据数据 做法如下&#xff1a; 1、在sheet2的C列用公式 LEFT(A2,6)&REPT("*",8)&RIGHT(A2,4) 做出脱敏数据&#xff0c;用来与sheet1的脱敏数据匹配 2、在sheet…

AWS基础网络产品及协同架构-Networking

简介 一个完整的AWS网络架构图&#xff0c;包含了如下能力&#xff1a; Users (用户): 表示使用AWS服务的用户或系统。 SaaS (软件即服务): 表示在AWS上运行的软件服务&#xff0c;如企业微信可能作为SaaS提供。 example.com?: 这可能是一个示例域名&#xff0c;用于展示如何…

快速上手Spring Cloud 十:Spring Cloud与微前端

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

分享多种mfc100u.dll丢失的解决方法(一键修复DLL丢失的方法)

在使用电脑过程中&#xff0c;我们经常会遇到一些陌生的DLL文件&#xff0c;例如mfc100u.dll。这些DLL文件是动态链接库&#xff08;Dynamic Link Libraries&#xff09;的缩写&#xff0c;它们包含了可以被多个程序共享的代码和数据。今天&#xff0c;我们将深入探讨mfc100u.d…

深度学习:基于PyTorch的模型解释工具Captum

深度学习&#xff1a;基于PyTorch的模型解释工具Captum 引言简介示例安装解释模型的预测解释文本模型情绪分析问答 解释视觉模型特征分析特征消融鲁棒性 解释多模态模型 引言 当我们训练神经网络模型时&#xff0c;我们通常只关注模型的整体性能&#xff0c;例如准确率或损失函…

Pillow教程06:将图片中出现的黄色和红色,改成绿色

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…

浅析扩散模型与图像生成【应用篇】(十三)——GLIDE

13. GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models 该文提出一种基于文本引导的扩散模型用于图像的生成和编辑&#xff0c;可以根据给定的文字描述来生成或编辑图像。在ADM中我们曾介绍了一种基于分类器引导的图像生成模型&a…

鸿蒙HarmonyOS应用开发之使用Node-API实现跨语言交互开发流程

使用Node-API实现跨语言交互&#xff0c;首先需要按照Node-API的机制实现模块的注册和加载等相关动作。 ArkTS/JS侧&#xff1a;实现C方法的调用。代码比较简单&#xff0c;import一个对应的so库后&#xff0c;即可调用C方法。 Native侧&#xff1a;.cpp文件&#xff0c;实现模…

gin基础学习笔记--Log

1. 日志文件 package mainimport ("io""os""github.com/gin-gonic/gin" )func main() {gin.DisableConsoleColor()// logging to a filef, _ : os.Create("gin.log")gin.DefaultWriter io.MultiWriter(f)// 如果需要同时将日志写入文…

【快捷部署】008_Docker(25.0.5)

&#x1f4e3;【快捷部署系列】008期信息 编号选型版本操作系统部署形式部署模式复检时间008Docker25.0.5Ubuntu 20.04apt-2024-03-27 一、快捷部署 #!/bin/bash ################################################################################# # 作者&#xff1a;cxyt…

机器人是怎么计时的(通用定时器 - 时基单元)

目录 一&#xff0c;引言 二&#xff0c;机器人的“大脑” 三&#xff0c;时基单元介绍 1&#xff0c;定时器框图 2&#xff0c;时基单元 &#xff08;1&#xff09;预分频器 &#xff08;2&#xff09;CNT计数器 &#xff08;3&#xff09;自动重装载寄存器 四&#…

如何在jupyter使用新建的虚拟环境以及改变jupyter启动文件路径。

对于刚刚使用jupyter的新手来说&#xff0c;经常不知道如何在其中使用新建的虚拟环境内核&#xff0c;同时&#xff0c;对于默认安装的jupyter&#xff0c;使用jupyter notebook命令启动 jupyter 以后往往默认是C盘的启动路径&#xff0c;如下图所示&#xff0c;这篇教程将告诉…

深入在线文档系统的 MarkDown/Word/PDF 导出能力设计

深入在线文档系统的 MarkDown/Word/PDF 导出能力设计 当我们实现在线文档的系统时&#xff0c;通常需要考虑到文档的导出能力&#xff0c;特别是对于私有化部署的复杂ToB产品来说&#xff0c;文档的私有化版本交付能力就显得非常重要&#xff0c;此外成熟的在线文档系统还有很…

中伟视界:智能识别!电动车戴头盔系统,保障您的安全出行

电动车AI头盔识别系统是一种利用人工智能技术提高道路安全的创新应用。该系统的核心目的是确保电动车驾驶者遵守交通安全规则&#xff0c;特别是佩戴头盔这一基本安全措施。通过自动识别驾驶者是否佩戴头盔&#xff0c;这一系统能够鼓励更为安全的骑行行为&#xff0c;减少交通…

Android客户端自动化UI自动化airtest从0到1搭建macos+demo演示

iOS客户端自动化UI自动化airtest从0到1搭建macosdemo演示-CSDN博客 一、基础环境 1. 安装jdk 选择jdk8 如果下载高版本 可能不匹配会失败 下载.dmg文件 苹果电脑 &#xff5c; macOS &#xff5c; jdk1.8 &#xff5c; 环境变量配置_jdk1.8 mac-CSDN博客 Java Downloads …

【LeetCode热题100】105. 从前序与中序遍历序列构造二叉树(二叉树)

一.题目要求 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 二.题目难度 中等 三.输入样例 示例 1: 输入: preorder [3,9,20,15,7], inorder…

【前端】layui学习笔记

参考视频&#xff1a;LayUI 1.介绍 官网&#xff1a;http://layui.apixx.net/index.html 国人16年开发的框架,拿来即用,门槛低 … 2. LayUi的安装及使用 Layui 是一套开源的 Web UI 组件库&#xff0c;采用自身轻量级模块化规范&#xff0c;遵循原生态的 HTML/CSS/JavaScript…

Docker Compose环境的安装通过docker compose完成python程序的运行

目录 Docker Compose环境的安装 通过docker compose完成python程序的运行 Docker Compose环境的安装 ##### 方法一&#xff1a;直接下载编译好的二进制文件 注意&#xff1a;只有linux平台上在安装docker时没有安装docker-compose&#xff0c;windows、macos安装docker时自…

C# wpf 嵌入wpf控件

WPF Hwnd窗口互操作系列 第一章 嵌入Hwnd窗口 第二章 嵌入WinForm控件 第三章 嵌入WPF控件&#xff08;本章&#xff09; 文章目录 WPF Hwnd窗口互操作系列前言一、如何实现&#xff1f;1、继承HwndHost2、添加Content属性3、创建wpf窗口并设置Content4、关闭wpf窗口 二、完整…