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

news2024/11/18 22:54:52

💞💞 前言

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.cpp
 namespace N1
 {
	 int a;
 	 int b;
	 int Add(int left, int right)
	 {
	 return left + right;
	 }
	 //嵌套N2
	 namespace 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.h
 namespace 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是指你的命名空间名称,这里是tutu
 return 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.coloradmin.cn/o/1570874.html

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

相关文章

Ant Design Vue table固定列失效问题解决

问题描述&#xff1a;项目中封装好的公共table组件&#xff0c;基于Ant Design Vue table封装&#xff1b;使用中&#xff0c;用到了列固定&#xff0c;但是没生效&#xff0c;找了好久的原因。。。最后是因为外层容器标签导致&#xff1b; 解决方法&#xff1a;如果a-table组件…

Windows系统安装OpenSSH结合VS Code远程ssh连接Ubuntu【内网穿透】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-AwzyR2lkHKjD9HYl {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

【吊打面试官系列】Redis篇 - Redis单进程单线程好处?

大家好&#xff0c;我是锋哥。今天分享关于 【Redis单进程单线程好处&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Redis单进程单线程好处&#xff1f; 代码更清晰&#xff0c;处理逻辑更简单 不用去考虑各种锁的问题&#xff0c;不存在加锁释放锁操作&…

使用简单MLP实现0-9数字识别,数据集为MNIST

简介 需求&#xff1a; 基于pytorch实现简单MLP&#xff0c;完成数字识别&#xff0c;采用MNIST手写数字作为数据集&#xff0c;MNIST&#xff1a;有6万张训练图片&#xff0c;1万张测试图片训练结束后&#xff0c;随机取3张测试图片&#xff0c;展示模型的预测结果和真实图片…

策略模式图

策略模式 小小的图解 主要的三个角色 Strategy—抽象策略角色ConcreateStrategy—具体策略角色Context—上下文角色 封装了对具体策略的调用可以使用set的依赖注入也可以使用构造方法 核心是上下文角色 只要调用上下文角色就行&#xff0c;实现解耦 策略 工厂 将上下文角…

【java探索之旅】逻辑控制掌握 顺序结构 分支语句

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、逻辑控制的概念二、顺序结构三、分支结构3.1 if语句3.2 if习题巩固3.3 细节注意项…

TR3 - Transformer算法详解

目录 文本输入处理词向量位置向量 编码器 EncoderSelf-Attention多头注意力机制残差连接 解码器 Decoder线性层与Softmax损失函数总结与心得体会 这周来看一下Transformer是怎么将文本转换成向量&#xff0c;然后又输入到模型处理并得到最终的输出的。 文本输入处理 词向量 …

递归算法解读

递归&#xff08;Recursion&#xff09;是计算机科学中的一个重要概念&#xff0c;它指的是一个函数&#xff08;或过程&#xff09;在其定义中直接或间接地调用自身。递归函数通过把问题分解为更小的相似子问题来解决原问题&#xff0c;这些更小的子问题也使用相同的解决方案&…

2024-04-05 问AI: 介绍一下深度学习中的Leaky ReLU函数

文心一言 Leaky ReLU&#xff08;Leaky Rectified Linear Unit&#xff09;函数是深度学习领域中的一种激活函数&#xff0c;主要用于解决ReLU&#xff08;Rectified Linear Unit&#xff09;函数在负值区域为零的问题。ReLU函数在输入为正时保持原样&#xff0c;而在输入为负…

Navicat工具使用

Navicat的本质&#xff1a; 在创立连接时提前拥有了数据库用户名和密码 双击数据库时&#xff0c;相当于建立了一个链接关系 点击运行时&#xff0c;远程执行命令&#xff0c;就像在xshell上操作Linux服务器一样&#xff0c;将图像化操作转换成SQL语句去后台执行 一、打开Navi…

Python学习: 错误和异常

Python 语法错误 解析错误(Parsing Error)通常指的是程序无法正确地解析(识别、分析)所给定的代码,通常是由于代码中存在语法错误或者其他无法理解的结构导致的。这可能是由于缺少括号、缩进错误、未关闭的引号或其他括号等问题造成的。 语法错误(Syntax Error)是指程序…

CSS设置网页颜色

目录 前言&#xff1a; 1.颜色名字&#xff1a; 2.十六进制码&#xff1a; 3.RGB&#xff1a; 4.RGBA&#xff1a; 5.HSL&#xff1a; 1.hue&#xff1a; 2.saturation&#xff1a; 3.lightness&#xff1a; 6.HSLA&#xff1a; 前言&#xff1a; 我们在电脑显示器&…

【NLP练习】中文文本分类-Pytorch实现

中文文本分类-Pytorch实现 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、准备工作 1. 任务说明 本次使用Pytorch实现中文文本分类。主要代码与文本分类代码基本一致&#xff0c;不同的是本次任务使用…

[中级]软考_软件设计_计算机组成与体系结构_07_存储系统

存储系统 层次划存储概念图局促性原理分类存储器位置存取方式按内容存储按地址存储 工作方式拓展 往年真题 高速缓存(cache)概念案例解析&#xff1a;求取平均时间 Cache与主存的地址映射映像往年真题 主存编制计算编址大小的求取编址与计算存储单元编址内容总容量求取例题解析…

c# wpf template itemtemplate+dataGrid

1.概要 2.代码 <Window x:Class"WpfApp2.Window8"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend…

[C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体

关于C版本帧差法可以参考博客 [C]OpenCV基于帧差法的运动检测-CSDN博客https://blog.csdn.net/FL1768317420/article/details/137397811?spm1001.2014.3001.5501 我们将参考C版本转成opencvsharp版本。 帧差法&#xff0c;也叫做帧间差分法&#xff0c;这里引用百度百科上的…

【力扣每日一题】1026. 节点与其祖先之间的最大差值

LC 1026. 节点与其祖先之间的最大差值 题目描述 给定二叉树的根节点 root&#xff0c;找出存在于 不同 节点 A 和 B 之间的最大值 V&#xff0c;其中 V |A.val - B.val|&#xff0c;且 A 是 B 的祖先。 &#xff08;如果 A 的任何子节点之一为 B&#xff0c;或者 A 的任何子…

https证书申请方式

网站HTTPS证书&#xff0c;也称为SSL证书或TLS证书&#xff0c;是一种数字证书&#xff0c;用于在用户浏览器与网站服务器之间建立安全的加密连接。当网站安装了HTTPS证书后&#xff0c;用户访问该网站时&#xff0c;浏览器地址栏会显示为"https://"开头&#xff0c;…

CSS层叠样式表学习(文本属性)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS文本属性的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 四、CSS文本属性 4.1 文本颜色 4.2 对齐文本 4.3 装饰文本 4.4 文本缩进 4.5 行间距 4.6 文本…

简单的购物商城

SSM整合后的一个及其简单的商城&#xff0c;首页数据是模拟的&#xff0c;主要测试购物车模块 启动 创建数据库&#xff1a;shopping导入建表脚本&#xff1a;shopping.sql修改db.properties部署和启动项目&#xff08;项目的path为项目名&#xff09;访问 http://localhost:…