【C++初阶(一)】学习前言 命名空间与IO流

这篇具有很好参考价值的文章主要介绍了【C++初阶(一)】学习前言 命名空间与IO流。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本专栏内容为:C++学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C++。

💓博主csdn个人主页:小小unicorn
⏩专栏分类:C++
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

什么是C++

C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

C++发展史

1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes。

我们先来看下C++的历史版本:
【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流
现在公司主流使用还是C++98和C++11。

关于C++2X最新特性的讨论:
https://zhuanlan.zhihu.com/p/107360459

C++现状:

C/C++在TIOBE编程语言社区
常年位居前五
在23年更是霸榜前三!
【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流

C++在工作领域中的应用

  1. 操作系统以及大型系统软件开发
  2. 服务器端开发
  3. 游戏开发
  4. 嵌入式和物联网领域
  5. 数字图像处理
  6. 人工智能
  7. 分布式应用

C++入门部分

C++关键字:

C++总计63个关键字,C语言32个关键字。
【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流

命名空间:

在介绍命名空间之前,先看下面代码所示:

#include<stdio.h>

int rand = 10;

int main()
{

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

这个代码很简单,实现的功能就是打印rand函数的值。(这里赋值为10.并且以全局变量定义)

那我们在这个代码实现的基础上加一个头文件:

#include<stdlib.h>

也就是说:

#include<stdio.h>
#include<stdlib.h>

int rand = 10;

int main()
{

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

我们看一下在编译器中运行的结果:
【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流
加了个头文件后,编译器报错了,这是为什么呢?

我们看报错原因:说是rand函数重定义。这是因为在库中已经有了rand这个函数,如果再次使用rand这个名字定义变量或者函数时,编译器会分不清你到底想使用哪个rand,因而报错。

那么如何解决这个问题呢?
这就是我们要首先介绍的命名空间

C++为了解决C语言上述的问题
引出了命名空间这种玩法
(C++兼容C语言的所有语法)

命名空间定义:

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

 //NIC是命名空间的名字,一般开发中是用项目名字做命名空间名。
namespace NIC
{
	// 命名空间中可以定义变量/函数/类型
	int rand = 10;//变量

	int Add(int left, int right)//函数
	{
		return left + right;
	}

	struct Test//结构体
	{
		int a[10];
		int val;
	};
}

命名空间相当于一个独立的作用域
命名空间中所有内容都局限于该命名空间中

【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流

当然,命名空间也可以嵌套:

namespace NIC
{
	// 命名空间中可以定义变量/函数/类型
	int rand = 10;//变量

	int Add(int left, int right)//函数
	{
		return left + right;
	}

	struct Test//结构体
	{
		int a[10];
		int val;
	};

	//命名空间的嵌套:
	namespace NIC2
	{
		int a;
		int b;
		

		int sum(int x, int y)
		{
			return x + y;
		}

		struct Student
		{
			int ID;
			char Name[20];
		};
	}
}

命名空间的使用:

那么我们回到我们最初的那个问题,既然我们现在知道了是函数冲突产生的问题,并且用命名空间解决,那么如何使用呢?

先看下面代码示例:

int main()
{

	printf("%d", NIC::rand);
	return 0;
}

我们刚才把rand函数包装在了我们的命名空间里,这里我们要打印rand的值,采用了命名空间名+::的形式,这就是使用命名空间的第一种方法:加命名空间名称及作用域限定符。

方法一:加命名空间名称及作用域限定符(不展开命名空间)

:: 域作用限定符。
通过域作用符我们就可以访问命名空间中的成员:

int main()
{
	printf("%d\n", NIC::rand);
	int b = NIC::Add(1, 3);
	printf("%d", b);
	struct NIC::Test node;
	return 0;
}

结果显示:
【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流

这个代码示例我们访问了我们命名空间里面的rand和Add函数。最后一个我们开辟了结构体的新节点。

方法二:使用using将命名空间中某个成员引入(展开空间中部分内容)

假设NIC空间中的rand使用频率很高
可以将rand变量单独展开到全局域

using NIC::rand;

假设NIC空间中的Add函数使用频率很高
可以将Add函数单独展开到全局域

using NIC::Add;

看一下测试代码:

using  NIC::rand;
int main()
{
	int b = rand;//rand展开直接用

	int c = NIC::Add(3, 5);//Add没有展开,需要用域作用符::访问

	printf("%d\n%d", b, c);

	return 0;
}

结果如下:
【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流

方法三:使用using namespace 命名空间名称 引入(展开空间中全部内容)

在空间NIC后面加上

using namespace NEO;

这句话的意思是:
将空间NIC展开为全局域

我们在看C++程序时经常看见:

using namespace std;

std就是C++的标准库。

当NIC空间被展开后
空间里的所有内容可以直接使用:

namespace NIC
{
	// 命名空间中可以定义变量/函数/类型
	int rand = 10;//变量

	int Add(int left, int right)//函数
	{
		return left + right;
	}

	struct Test//结构体
	{
		int a[10];
		int val;
	};


	//命名空间的嵌套:
	namespace NIC2
	{
		int a;
		int b;
	   int sum(int x, int y)
	   {
	   return x + y;
	   }
	   struct Student
       {
	    int ID;
	    char Name[20];
	    };
	}
}


using namespace NIC;
int main()
{
	int b = rand;
	printf("%d", b);

	return 0;
}

结果如下:
【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流

对命名空间展开的思考

假设我们将自定义NIC空间和标准库的std空间同时展开
那么整型变量rand和rand函数同时暴露在全局域
我们再去使用它时也会报错:

using namespace std;
using namespace NIC;

所以直接展开std标准库也有冲突风险
但是不展开的话,写输入输出会很麻烦

那么平时写代码时应该怎么办?
结论:

1.写项目时,尽量不要展开标准库
2.日常练习时应该展开标准库
3.写项目使用部分常用内容展开

C++输入与输出:

C语言输入输出方式,相信大家都并不陌生,那么C++如何输入输出呢?

在C++中,输入输出用的是IO流,跟C语言一样,在使用C++输入输出前要包含一个头文件:

#include<iostream>

其次,因为输入输出函数直接在库里面,我们可以直接展开std库也可以访问std库。

using namespace std;
using std::cout
using std::cin
using std::endl

具体用什么方式应人而异,根据自己习惯选择。

cout(标准输出对象(控制台))

C++中用:cout<< 来进行打印输出。(console:控制台 out:输出)
<<:流插入运算符

using std::cout;
int main()
{
	cout << "hello world\n";
	return 0;
}

输出结果:
【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流

从代码示例,我们可以理解为:hello word字符串就是流,流向到对象(终端)中去,进行打印输出。

补充1:
在C语言中,根据类型不同,我们用printf函数打印的时候,需要指定格式才能打印:

int main()
{
	int a = 10;
	double b = 5.5;
	printf("%d %.2lf", a, b);
	return 0;
}

但是我们C++中,会自动识别类型:

using std::cout;
int main()
{

	cout << "hello world\n";
	int a = 10;
	double b = 5.5;
	cout << a<<"\n";
	cout << b;

	return 0;
}

输出结果:
【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流
不仅如此:打印的时候我们可以多次用<<流插入运算符。

using std::cout;
int main()
{
	cout << "hello world\n";
	int a = 10;
	double b = 5.5;
	cout << a<<"\n"<<b<<"\n"<<"hello world\n"<<'\n';
	return 0;
}

输出结果:
【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流
补充2:
在C++中,我们可以用endl来表示换行符。(end:结尾 Line:行)

int main()
{
	// IO流
	// 自动识别输出变量的类型
	// <<流插入
	std::cout << "hello world\n";
	int a = 10;
	double b = 11.11;
	//std::cout << a << "\n";
	//std::cout << b << "\n";
	std::cout << a << "\n" << b << '\n';
	std::cout << a << std::endl << b << std::endl;

	return 0;
}

输出结果:
【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流

cin(标准输入对象(键盘))

C++中用:cin>>来进行获取键盘输入。(console:控制台 in:里面)
<<:流提取运算符

using  std::cin;
using  std::cout;
using  std::endl;
int main()
{
	int a;
	double b;
	// 流提取
	cin >> a >> b;

	cout << a  << endl << b << endl;
	cout << a << endl << b << endl;

	return 0;
}

输出结果:
【C++初阶(一)】学习前言 命名空间与IO流,c++,c++,IO流

注意:关于cout和cin还有很多更复杂的用法,比如控制浮点数输出精度,控制整形输出进制格式等等。因为C++兼容C语言的用法,这些又用得不是很多,我们这里就不展开学习了。后续如果有需要,我
们可以进行网上查阅并仔细学习。
文章来源地址https://www.toymoban.com/news/detail-717718.html

到了这里,关于【C++初阶(一)】学习前言 命名空间与IO流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++入门(1):命名空间,IO流 输入输出,缺省参数

    一、命名空间 1.1 命名空间的作用: ​ 避免标识符命名冲突 1.2 命名空间定义: :namespace PS: 命名空间可以嵌套. 在同一工程中,编译器会把 相同名称 的命名空间 合并 成到同一个命名空间中。 1.3 命名空间的使用 一个命名空间相当于定义了一个作用域,其中的所有内

    2024年02月07日
    浏览(45)
  • 【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入&输出、缺省参数、函数重载

    目录 1. C++ 2. 命名空间 2.1 命名空间的定义 2.2 命名空间的使用 3. C++输入输出 4. 缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 5. 函数重载 5.1 函数重载概念 5.2 C++支持函数重载的原理——名字修饰(name Mingling) 5.3 extern \\\"C\\\" ❀❀❀ 没有坚持的努力,本质上并没有多

    2024年02月15日
    浏览(57)
  • 【C++初阶】关键字&命名空间&缺省函数&函数重载入门必看!!!超详解!!!

     ========================================================================= 主页点击直达: 个人主页 我的小仓库:代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 计算机

    2024年02月07日
    浏览(47)
  • 【C++初阶】前言——C++的发展简述及学习方法分享

     ========================================================================= 主页点击直达: 个人主页 我的小仓库: 代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记: Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 ====

    2024年02月08日
    浏览(62)
  • 【C++初阶】一、入门知识讲解(C++关键字、命名空间、C++输入&输出、缺省参数、函数重载)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】十一、归并排序(比较排序)的讲解和实现 (递归版本 + 非递归版本 -- C语言实

    2024年02月05日
    浏览(51)
  • 【初阶C++】前言

    C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了 OOP(object oriented programming:面向对象)思想 ,支持面向对象的程序设计语言应运而生

    2024年02月04日
    浏览(62)
  • 【C++学习】C++入门 | C++该怎么学 | 命名空间 | 输入输出

    欢迎来到C++的世界,这是一门令人兴奋的语言。 好吧,每当我开始阅读C++的书籍的时候,开头的第一句话必定是这个, 也不知道其他语言的编程书籍是不是这样,那就让这句话也作为我C++分享之路上的第一句话吧。 目录 写在前面 1. C++怎么学? 1. C语言 2. Object-Oriented C++ 3.

    2024年02月10日
    浏览(42)
  • 【C++学习】线程库 | IO流 | 空间配置器

    🐱作者:一只大喵咪1201 🐱专栏:《C++学习》 🔥格言: 你只管努力,剩下的交给时间! 在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。 C++11中最重要的特性就是支持了多线程编程,使得C++在并行编程

    2024年02月12日
    浏览(52)
  • Unity报错命名空间System.IO.Ports不存在解决方法SerialPort

    尝试解决方法:工具–Nuget包管理器(N)–管理解决方案的Nuget程序包(N)搜索SerialPort,重新下载System.IO.Ports,报错仍然存在; 发现问题在于设定,使用这个包的时候必须将Project Settings – Player – Other settings – Configuration – API Compatibility Level 从 .NET standard 2.1 改成 .NET

    2024年04月17日
    浏览(39)
  • 【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )

    命名空间 namespace 又称为 名字空间 , 名称空间 , 名域 , 作用域 , 是 C++ 语言 对 C 语言 的扩展 之一 ; C++ 中的 命名空间 namespace 指的是 标识符 的 可见范围 , C++ 标准库中的 所有 标识符 , 都定义在 std 命名空间中 ; 命名空间 英文名称是 \\\" namespace \\\" , name 是 名字 , 名称 的意思 ,

    2024年02月12日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包