c++入门(命名空间)

本文介绍了C++中的HelloWorld程序,强调了C++与C语言的兼容性,并展示了使用iostream库的输出方式。文章重点讨论了命名空间的概念,它是解决命名冲突的有效手段,通过示例解释了命名空间的使用,包括局部作用域、全局作用域和域作用限定符。同时,提到了命名空间的展开方式,如全局展开、部分展开和指定命名空间展开,并提醒了避免命名冲突的注意事项。

目录

1.hello c++ 

2.命名空间

1.hello c++ 

c++兼容c语言,当你在cpp后缀的文件下编译一个基本的 “hello world ” 的时候,能发现完美运行。

在c++中,打印可以用一种新的方式:

#include<iostream>//注意没有.h
using namespace std;//展开标准库
int main()
{
	printf("hello world\n");
	cout << "hello world" << endl;
}

结果:

cout意为“流插入”,可以理解成输出,通过观察两组数据可以发现,endl 可以理解成结束换行 。

2.命名空间

我们编程的时候可能会定义一个与库里面或者其他源文件冲突的变量。C++中使用命名空间可以避免命名冲突。命名空间提供了一种将库和用户代码包装在一起的方法,以避免名称冲突。通过使用命名空间,开发者可以将代码分割为不同的逻辑单元,每个逻辑单元都有自己的命名空间,并且不同逻辑单元之间的变量、函数等名称不会发生冲突。

首先我们先引入域作用限定符:

int a = 2;
 void f1()
{
	int a = 0;
	printf("%d\n", a);
	printf("%d\n",::a);  // ::域作用限定符
}

void f2()
{
	int a = 1;
	f1();
	cout << a << endl;
}

在main函数中通过 f2()的方式输出三行结果。

 第一个和第三个遵循局部变量优先原则,输出局部定义的值,第二个通过域作用限定符 :: 前没有参数默认指定从全局找。输出在全局定义的值。

命名空间 -- 命名空间域,只影响使用,不影响生命周期

#pragma once
struct Node
{
	struct Node* next;
		int val;
};//Seqlist.h
#pragma once
struct Node
{
	struct Node* next;
	int val;
};
struct Queue
{
	struct Node* head;
	struct Node* tail;
};//queue.h

对于两个不同的.h 文件,在主程序包含两个程序的头文件,会发现编译出错, “Node”:“struct”类型重定义 。 此时就体现出命名空间的价值 了,我们可以封装两个不同的 命名空间,类似“namespace + 名字{ 封装内容}” 的方式。

需要注意的是:命名空间 -- 命名空间域,只影响使用,不影响生命周期。

这里我们以list.h为例,展开对应的命名空间

#pragma once
namespace B
{
	struct Node
	{
		struct Node* next;
		int val;
	};
}

接着我们通过指定命名空间的方式找到你想要使用的代码

/*B ::struct Node a;*/
	struct B ::Node a;

 这段代码的意思是通过A这个空间找到对应的Node并创建相应的结构体。千万不能像第一行代码一样展开,我们封装的是Node这个结构体变量而不包含结构体关键字。

 开头我们提到了一个命名空间using namespace std;这句话的意思就是在全局展开C++标准程序库的内容,如果我们不想展开多余的内容,例如我只想使用c++的输入输出函数,或者刚才的那个Node结构体,可以进行部分展开

using std::cout;
using std::endl;
using B::Node;

这样做的好处是可以避免多次繁琐得在程序中展开常用命名空间的变量,前提是确保展开后不会出现重名的变量。还请读者在实际场景中具体选择。

需要注意的是,当你使用不同头文件的Node结构体时,要避免定义的变量名不要重名。

 int i;
 float i;

简单打个比方,类似这样,注意就行。

那如果命名空间重名了怎么办,大家可以自行想一下~。

总结

1.指定命名空间展开

2.全局展开

3.部分展开

在一些复杂的环境中是不推荐全局展开,需要注意的是不同展开方式的特点以及适用场景。

4.命名空间支持嵌套定义

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小C您好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值