认识命名空间namespace

一、提出问题

先看一段代码

#include<stdio.h>
#include<stdlib.h>   //该库文件中声明了一个名为rand的函数,用于产生一个随机数

int rand = 0;

int main() {
	printf("%d\n", rand);
	return 0;
}

这里的根本问题在于,printf 不知道要打印哪个rand,因为库文件中有一个rand,全局变量也有一个rand

所以当我们自己定义的变量 和 库文件里的函数同名时,会发生名字冲突

那么应该如何处理?? ========> 这个时候就轮到namespace出场了

二、namespace

namespace内部的变量、函数与外部隔离

1、命名空间定义

namespace 空间名
{
    //当前空间的成员
}

//例1:定义一个名为 N1 的命名空间
namespace N1
{
    int rand = 0;

    struct Node
    {

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

//例2:一个命名空间可以嵌套另一个命名空间
namespace N1
{
    int rand = 0;
 
    //命名空间 N2
    namespace N2
    {
        int Sub(int x,int y)
        {
            return x-y;
        }
    }
}

2、命名空间的使用

namespace N1
{
    int rand = 0;    
    
    int Add(int x,int y)
    {
        return x+y;
    }
}

(1)方式一(推荐):通过 空间名+作用域限定符引入

使用方式 ======>  空间名::成员变量名

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

int main() {
	printf("%d\n", rand);        //使用stdlib库中的rand函数

    printf("%d\n", N1::rand);    //使用N1命名空间中的rand变量
    printf("%d\n", N1::Add(1,2));    //使用N1命名空间中的Add函数
	return 0;
}

(2)方式二:using单独引入空间中的某个成员

一般用于引入命名空间中一些常用的变量

使用方式 ==========>   using  空间名::成员变量名

#include <stdio.h>
using N1::rand;            //using 相当于解除了隔离效果,此时会和stdlib的rand函数发生冲突

int main() {
    printf("%d\n", rand);    //可直接使用N1命名空间中的rand变量

	return 0;
}

(3)方式三(不推荐):using namespace 引入命名空间的中的全部成员

#include <stdio.h>
using namespace N1;            //using namespace 解除了命名空间 N1 的隔离效果
                               //N1 中的内容在当前文件中展开

int main() {
    printf("%d\n", rand);    //可直接使用N1命名空间中的rand变量
    printf("%d\n", Add(1,2));    //可直接使用N1命名空间中的Add函数

	return 0;
}

三、using namespace std

我们在使用cout、cin的时候,常常会看到这句话

因为命名空间std中包含了 C++的库函数,using namespace 解除了 std的隔离效果,让std在当前文件中展开

引入 iostream.h 文件,然后我们可以直接使用 cout、cin

#include <iostream.h>
int main(){
    cout << "hello,world!!" <<endl;
    return 0;
}

学习阶段可以使用这种方式

实际应用的时候,不推荐使用,把std在当前文件展开,可能会发生 同名冲突

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值