C++中命名空间(namespace)详解及其作用介绍

为什么要有命名空间

在C语言中定义了3个层次的作用域:文件(编译单元)、函数和复合语句

在C++中,多了类

全局变量中不能有同名函数、变量和类

为了使同名类存在,就要加作用域,于是就有了命名空间

命名空间是什么

命名空间是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突

命名空间,实际上就是一个由程序设计者命名的内存区域(分类用的)

没有给命名空间分类的作用域了,同层次命名空间就不能重名了

namespace a
{
	int b;
	double c;
}

命名空间就是分类用的,和文件夹作用一样的

全局变量可以理解为全局命名空间,就像根目录

在全局命名空间(根目录),创建命名空间(文件夹)

文件夹下可以继续创建文件夹

只要同一级别名字不一样就行

#include<stdio.h>
#include<stdlib.h>
namespace n1
{
	namespace n1
	{
		int rand = 1;
	}
}
int main()
{
	int rand = 1;
	printf("%d\n", n1::n1::rand);
	return 0;
}

怎么用

面向对象,只关注对象,用函数库进行操作

大家都是正常人,正常的名字就那么多,不分类,谁知道说的是谁

#include<stdio.h>
#include<stdlib.h>
namespace n1
{
	int a = 1;
}
namespace n2
{
	int a = 1;
}
int main()
{
	int rand = 1;
	printf("%d\n", a);
	return 0;

输出a,你说的是哪个,n1的,还是n2的,

使用命名空间

using namespace n1

#include<stdio.h>
#include<stdlib.h>
namespace n1
{
	int a = 1;
}
namespace n2
{
	int a = 1;
}
using namespace n1;
int main()
{
	int rand = 1;
	printf("%d\n", a);
	return 0;

n1::a 相当于给路径

#include<stdio.h>
#include<stdlib.h>
namespace n1
{
	int a = 1;
}
namespace n2
{
	int a = 1;
}
int main()
{
	int rand = 1;
	printf("%d\n", n1::a);
	return 0;
(0)

相关推荐

  • C++ namespace案例详解

    在C++语言编写的程序中,变量和函数等的作用范围是有一定限制的.比如,在函数体中定义的一个临时变量就不可以在函数体外使用.为了解决变量和函数等的作用范围,在C++语言中引入了名空间的概念,并增加了关键字namespace和using 在一个名空间中可以定义一组变量和函数,这些变量和函数的作用范围一致,可以将这些变量和函数称为这个名空间的成员. 通过名空间,可以在同一个文件中使用相同的变量名或函数名,只要它们属于不同的名空间.另外,名空间可以使得代码操作具有相同名字但属于不同库的变量.而且,名空间

  • 示例详解C++语言中的命名空间 (namespace)

    目录 前言 1. 命名空间 2. using 指令 3. 不连续的命名空间 4. 嵌套的命名空间 5. 命名空间内变量.函数.全局变量的作用域 5.1 using namespace first_space; 5.2 using namespace first_space::second_space; 总结 前言 命名空间可作为附加信息来区分不同库中相同名称的函数.类.变量等.命名空间即定义了上下文,命名空间就是定义了一个范围. 一个文件夹 (目录) 中可以包含多个文件夹,每个文件夹中不能有相同

  • C++深入讲解namespace与string关键字的使用

    目录 namespace 1.为什么使用namespace 2.namespace的定义 3.namespace的使用 4.使用using指示符 string 1.string的定义及初始化 2.访问string的内容 3.常用函数 namespace 首先声明:在C++中支持三种域局部域,名字空间,类域. 1.为什么使用namespace 在C++中可能会出现这样的情况:我们正在编写一个名为myj()函数的代码,但是另一个可用的库,它也具有相同的myj()函数.现在编译器无法知道代码中使用的m

  • C++ namespace命名空间解析

    目录 命名空间 namespace 命名空间的定义 1. 函数定义在命名空间里 2.对全局变量使用命名空间 3.命名空间的嵌套 4.using命名空间 5.命名空间里的结构体 命名空间 namespace #include<iostream> int rand = 0; int main() { printf("%d", rand); return 0; } 上述代码一定会出现以下情况: 原因: 自己定义的rand变量为某一库函数里面已经声明过的函数,意思就是你自己定义的东

  • C++如何切割String对象的方法

    目录 核心函数 find函数 substr函数 数值转换 输入样例 输出样式 C++相较于Java,Python 并没有提供的字符串分割的函数split,因此需要自己进行编写.在实际的工作中这一功能会被经常使用,所以进行简单的记录一下. 核心函数 代码实现的函数是调用String库中的find函数和substr函数. find函数 size_type find(const basic_string &str,size_type pos=0) find函数完成最简单的搜索,它查找参数指定的字符串(

  • 你真的懂C++中的namespace用法

    namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越拥挤,每个人都可能使用相同的名字来实现不同的库,于是程序员在合并程序的时候就会可能出现名字的冲突.namespace引入了复杂性,解决了这个问题.namespace允许像类,对象,函数聚集在一个名字下.本质上讲namespace是对全局作用域的细分. 说白了namespace是怕变量冲突而出现的一种界限,不同的namespac

  • 深入浅出分析C++ string底层原理

    目录 一.深浅拷贝 浅拷贝: 深拷贝 二.string迭代器原理 三.string的传统写法 1.构造实现 2.其他接口 一.深浅拷贝 浅拷贝: 在实现string时要是不实先string拷贝构造,会自动生成一个拷贝构造函数,但是他只是一个浅拷贝.两个string对象指向同一个地址,在两个对象调用析构函数是,前一个对象调用的析构函数已经释放了这个地址的内从,而后一个会重复释放该块空间,导致出错. 会触发断点,然后报错. class string { public: /*string() :_st

  • C++ 命名空间--namespace总结

    目录 定义 意义 名字空间的三种使用方法 匿名空间 名字空间嵌套 总结 定义 namespace 名字空间的名字{ 全局变量 类型定义 函数 } 意义 对于一个较大型的C++程序来说,需要由多个程序员相互协作编写,这样的情况下容易出现不同程序员在需要负责的程序部分使用相同名字的变量或函数,导致程序合并后出现问题.名字空间的作用,就是将不同程序员编译的程序放入相应的名字空间,每个名字空间相对独立,空间内的变量和函数名只局限于当前空间下,从而解决命名冲突的问题. 名字空间的三种使用方法 (1)作用域

  • C/C++中命名空间(namespace)详解及其作用介绍

    目录 概述 命名空间 命名空间的作用 自定义命名空间 命名空间成员的方法 案例 概述 命名空间 (namespace) 可以帮助我们区分不同库中相同名称的函数, 类, 变量等. 使用了命名空间即定义了上下文. 命名空间就是定义了一个范围. 命名空间 为了解决 C++ 标准库中的标识符与程序中的全局标识符之间以及不同库中的所有标识符之间的命名冲突. 标准 C++ 库的所有标识符都定义在一个名为 std 的命名空间中. 在程序中用到 C++ 标准库时, 使用 std 作为限定. 我们在写 "Hell

  • C++中命名空间(namespace)详解及其作用介绍

    为什么要有命名空间 在C语言中定义了3个层次的作用域:文件(编译单元).函数和复合语句 在C++中,多了类 全局变量中不能有同名函数.变量和类 为了使同名类存在,就要加作用域,于是就有了命名空间 命名空间是什么 命名空间是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突 命名空间,实际上就是一个由程序设计者命名的内存区域(分类用的) 没有给命名空间分类的作用域了,同层次命名空间就不能重名了 namespace a { int b; double c; } 命名空间就是分

  • C/C++中字符串流详解及其作用介绍

    目录 概述 字符串流 理解字符串流 输出字符串对象 输入字符串流对象 输入输出字符串流对象 案例一 案例二 字符数组 vs 文件 总结 概述 文件流类和字符串流类都是 ostream, istream 和 iostream 类的派生类, 因此对它们的操作方法是基本相同的. 字符串流 文件流 字符串流 概念 文件流是以外存文件为输入输出对象的数据流 字符串流也 称为内存流, 以内存中用户定义的字符数组 (字符串) 为输入输出的对象 相关流类 ifstream, ofstream 和 fstream

  • C/C++中数据类型转换详解及其作用介绍

    目录 概述 不同类型数据间的转换 隐式类型转换 强制类型转换 自己声明的类型转换 转换构造函数 类型转换函数 案例 应用 概述 在日常的开发中, 我们经常会用到数据类型转换, 所以我们要对数据类型转换有一定的了解. 不同类型数据间的转换 在 C++ 中, 某些标准类型的数据之间可以自动转换. 隐式类型转换 隐式类型转换: 由 C++ 编译系统自动完成的, 我们无需干预. 例如: int main() { int a = 6; a = a + 3.5; cout << a << en

  • C++中继承(inheritance)详解及其作用介绍

    概述 面向对象程序设计中最重要的一个概念是继承 (inheritance). 继承允许我们依据另一个类来定义一个类, 这使得创建和维护一个应用程序变得更统一. 这样做也达到了重用代码功能和提高执行效率的效果. 类的概念 一个类中包含了若干数据成员和成员函数. 不同的类中的数据成员和成员函数各不相同. 但是有时两个类的内容基本相同. 例如: 继承的概念 继承 (inheritance) 就是在一个已存在的类的基础上建立一个新的类. 已存在的类: 基类 (base class) 或父类 (fathe

  • C++中指针的详解及其作用介绍

    目录 概述 指向对象的指针 指向对象数据成员的指针 this 指针 this 指针的作用 this 指针的实现 概述 指针 (pointer) 是一个变量, 其指为另一个变量的地址. 即内存位置的直接地址. 指向对象的指针 在建立对象时, 编译系统会为每一个对象分配一定的存储空间, 以存放其成员. 我们可以定义一个指针变量, 用来存放对象的指针. 例如: Time time1; Time *p; // 定义指针, 格式: 类名 *对象指针名 p = &time1; // 将指针指向Time类对象

  • C++中友元的详解及其作用介绍

    目录 概述 友元 普通的友元函数 友元成员函数 友元类 总结 概述 类的友元函数 (friend) 是定义在类外部, 但是有权限访问类的所有私有 (private) 成员和保护 (protected) 成员. 友元 我们先来复习一下公有成员和私有成员的概念: 公有成员 (public) : 在类外可以访问 私有成员 (private): 只有本类中的函数可以访问 友元 (friend) 可以访问与其有好友关系的类中的私有成员 (有限制的共享). 友元包括友元函数和友元类: 友元函数: 如果在本类

  • C++中模板(Template)详解及其作用介绍

    目录 概述 函数模板 类模板 模板类外定义成员函数 类库模板 抽象和实例 概述 模板可以帮助我们提高代码的可用性, 可以帮助我们减少开发的代码量和工作量. 函数模板 函数模板 (Function Template) 是一个对函数功能框架的描述. 在具体执行时, 我们可以根据传递的实际参数决定其功能. 例如: int max(int a, int b, int c){ a = a > b ? a:b; a = a > c ? a:c; return a; } long max(long a, l

  • C++中运算符重载详解及其作用介绍

    目录 概述 函数重载 运算符重载 C++ 的运算符 重载运算符的规则 成员函数实现 Complex 加法 运算符重载的方法 多种实现方法 实现 operator+= 三种运算符重载函数 成员函数实现 友元函数实现 输出结果 重载单元运算符 例子 重载二元运算符 例子 重载 I/O 插入运算符 << 提取运算符 >> 总结 概述 运算符重载 (Operator Overloading) 函数重载 重载: 将同一名字重新赋予新的含义. 函数重载: 对一个函数赋予新的含义, 使之实现新功

  • C/C++ 中memset() 函数详解及其作用介绍

    memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在<string.h>头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, size_t n); 这里s可以是数组名,也可以是指向某一内在空间的指针: v为要填充的值: n为要填充的字节数: 例子: struct data { char num[100]; char name[100]; int n; }; struct data a, b[10]; me

随机推荐