当前位置: 首页 > news >正文

【C++入门】关键字、命名空间以及输入输出

💞💞 前言

hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹
在这里插入图片描述

💥个人主页:大耳朵土土垚的博客
💥 所属专栏:C++入门至进阶
从今天开始土土将会不定期更新有关C++的内容,希望大家多多点赞关注💖💖

目录

  • 💞💞 前言
  • 1. C++关键字(C++98)
  • 2. 命名空间
    • 2.1 命名空间定义
      • 2.1.1 正常的命名空间定义
      • 2.1.2命名空间嵌套定义
      • 2.1.3相同名称的命名空间
    • 2.2 命名空间使用
      • 2.2.1加命名空间名称及作用域限定符
      • 2.2.2使用using将命名空间中某个成员引入
      • 2.2.3使用using namespace 命名空间名称引入
  • 3. C++输入&输出
  • 4.结语

C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式
等。熟悉C语言之后,对C++学习有一定的帮助,本章节主要目标:

  1. 补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用 域方面、IO方面等。
  2. 为后续类和对象学习打基础。

1. C++关键字(C++98)

C++总计63个关键字,C语言32个关键字
ps:下面我们只是看一下C++有多少关键字,不对关键字进行具体的讲解。后面我们学到以后再细讲。

在这里插入图片描述

2. 命名空间

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

这里简单来说,命名空间的出现是为例防止名字重名而出现的冲突,只要将相同的名字规定在不同的空间(也就是命名空间)就可以避免冲突,就可以出现相同名字的情况,根本原因就是它们在不同的命名空间内使用,所以不会冲突;接下来我们举几个例子来看:

#include <stdio.h>
// #include <stdlib.h>int rand = 10;// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main(){printf("%d\n", rand);return 0;}

我们看到此时我们没有包含stdlib头文件// #include <stdlib.h>结果如下:

在这里插入图片描述

当我们把stdlib头文件包含进去:

#include <stdio.h>
#include <stdlib.h>
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{printf("%d\n", rand);return 0;
}
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”

结果如下:

在这里插入图片描述

所以C++通过提出命名空间来解决类似的情况🥳🥳

2.1 命名空间定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

2.1.1 正常的命名空间定义

 // tutu是命名空间的名字,一般开发中是用项目名字做命名空间名。// 1. 正常的命名空间定义
namespace tutu{// 命名空间中可以定义变量/函数/类型//(1)命名空间中定义变量int rand = 10;//(2)命名空间中定义函数int Add(int left, int right){return left + right;}//(3)命名空间中定义类型struct Node{struct Node* next;int val;};}

2.1.2命名空间嵌套定义

 //2. 命名空间可以嵌套
// test.cppnamespace N1{int a;int b;int Add(int left, int right){return left + right;}//嵌套N2namespace N2{int c;int d;int Sub(int left, int right){return left - right;}}}

2.1.3相同名称的命名空间

 //3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
// ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个
// test.hnamespace N1{int Mul(int left, int right){return left * right;}}

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

2.2 命名空间使用

学会了怎么定义命名空间,那么命名空间中成员该如何使用呢?
例如:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
namespace tutu
{int a = 0;int b = 1;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}
int main()
{// 编译报错:error C2065: “a”: 未声明的标识符printf("%d\n", a);return 0;
}

在这里插入图片描述
✨✨✨命名空间的使用有三种方式

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

int main(){printf("%d\n", N::a);//N是指你的命名空间名称,这里是tutureturn 0;    
}

N是指你的命名空间名称,这里是tutu
作用域限定符:::

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
namespace tutu
{int a = 0;int b = 1;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}
int main()
{// 编译报错:error C2065: “a”: 未声明的标识符printf("%d\n",tutu::a);return 0;
}

结果如下:

在这里插入图片描述

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

using N::b;int main(){printf("%d\n", N::a);printf("%d\n", b);return 0;    
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
namespace tutu
{int a = 0;int b = 1;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}
using tutu::b;
int main()
{printf("%d\n", b);return 0;
}

结果如下:
在这里插入图片描述

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

using namespce N;int main(){printf("%d\n", N::a);printf("%d\n", b);Add(10, 20);return 0;    
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
namespace tutu
{int a = 0;int b = 1;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}using namespace tutu;
int main()
{printf("%d\n", a);printf("%d\n", b);Add(10, 20);return 0;
}

结果如下:
在这里插入图片描述

我们平常所见的using namespace std;就是使用第三种引入
std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中,例如接下来我们要实现的输入输出;

3. C++输入&输出

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

结果如下:
在这里插入图片描述

using namespace std;
int main()
{int a;double b;char c;// 可以自动识别变量的类型cin >> a;cin >> b >> c;cout << a << endl;cout << b << "  " << c << endl;return 0;
}

上述代码表示在键盘上输入a,b,c的值后打印出来:
在这里插入图片描述

✨✨✨注意:

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

std命名空间的使用惯例:
std是C++标准库的命名空间,如何展开std使用更合理呢?

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

4.结语

以上就是有关C++关键字,命名空间以及输入输出的内容啦~ 完结撒花~ 🥳🎉🎉🎉

http://www.lryc.cn/news/332245.html

相关文章:

  • 初识MySQL(中篇)
  • 前端订阅后端推送WebSocket定时任务
  • 提高机器人系统稳定性:引入阻尼作为共振后的相位超前
  • 深度学习理论基础(三)封装数据集及手写数字识别
  • vue3+eachrts饼图轮流切换显示高亮数据
  • UTONMOS:AI+Web3+元宇宙数字化“三位一体”将触发经济新爆点
  • 开始焦虑了
  • 数据结构和算法:十大排序
  • LLaMA-Factory微调(sft)ChatGLM3-6B保姆教程
  • Web安全-浏览器安全策略及跨站脚本攻击与请求伪造漏洞原理
  • 蓝桥杯B组C++省赛——飞机降落(DFS)
  • Java 中的 Map集合
  • 基于springboot大学生兼职平台管理系统(完整源码+数据库)
  • C#学生信息管理系统
  • 双机 Cartogtapher 建图文件配置
  • VMware提示 该虚拟机似乎正在使用中,如何解决?
  • 阿里云短信服务业务
  • ElasticSearch的DSL查询
  • 每天定时杀spark进程
  • win10 安装kubectl,配置config连接k8s集群
  • Calico IPIP和BGP TOR的数据包走向
  • 静态成员主要用于提供与类本身相关的功能或数据,有什么应用场景
  • 在线考试|基于Springboot的在线考试管理系统设计与实现(源码+数据库+文档)
  • C语言-----数据在内存中的存储(1)
  • Ribbon有哪些负载均衡策略
  • websocket多级nginx代理
  • 【python从入门到精通】-- 第四战:语句汇总
  • 【NC50937】货仓选址
  • Nginx配置使用笔记
  • GridLayoutManager 中的一些坑