精华内容
下载资源
问答
  • 命名空间定义及使用
    千次阅读
    2020-04-04 22:54:02

    一.命名空间
    在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

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

    1. 普通的命名空间
      namespace N1 // N1为命名空间的名称
      {
      // 命名空间中的内容,既可以定义变量,也可以定义函数
      int a;
      int Add(int left, int right)
      {
      return left + right;
      }
      }
    2. 命名空间可以嵌套
      namespace N2
      {
      int a;
      int b;
      int Add(int left, int right)

    注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
    二.命名空间使用
    命名空间中成员该如何使用呢?比如:
    {
    return left + right;
    }

    namespace N3
    {
    int c;
    int d;
    int Sub(int left, int right)
    {
    return left - right;
    }
    }
    }

    1. 同一个工程中允许存在多个相同名称的命名空间
      编译器最后会合成同一个命名空间中。
      namespace N1
      {
      int Mul(int left, int right)
      {
      return left * right;
      }
      }
      namespace N {
      int a = 10;
      int b = 20;
      int Add(int left, int right)
      {
      return left + right;
      }
      int Sub(int left, int right)
      {
      return left - right;
      }
      }
      int main()
      {
      printf("%d\n", a); // 该语句编译出错,无法识别a
      return 0; }

    命名空间的使用有三种方式:
    1.加命名空间名称及作用域限定符
    2.使用using将命名空间中成员引入
    3.使用using namespace 命名空间名称引入

    更多相关内容
  • C++--名字空间定义

    千次阅读 2019-11-04 17:02:54
    C++提供了一种称为**名字空间(namespace)**的机制,...例如,我们尝试利用自己定义的"My_code"名字空间进行试验: namespace My_code{ //定义My_code名字空间 class complex{/*...*/}; complex sqrt(complex); ...

    C++提供了一种称为**名字空间(namespace)**的机制,一方面表达某些声明是属于一个整体,另一方面表明它们的名字不会与其他名字空间中的名字冲突。
    例如,我们尝试利用自己定义的"My_code"名字空间进行试验:

    namespace My_code{     //定义My_code名字空间
    	class complex{/*...*/};
    	complex sqrt(complex);
    	//...
    	int main();
    }
    int My_code::main(){  //这个main()函数隶属于上面自己定义的My_code名字空间的main()函数,
    	complex z{1,2};
    	auto z2 = sqrt(z);
    	std::cout<<'{'<<z2.real()<<','<<z2.image()<<"}\n";
    	//...
    }
    int main(){//这个main()函数不是My_code名字空间的main()函数,只是全局名字空间中的函数。
    	return My_code::main(); //这句代码表示回调My_code名字空间的main()函数,
    }
    

    通过将代码放在名字空间My_code中,就可以确保我们的名字不会和名字空间std中的标准库名字冲突。因为标准库确实支持complex算术运算,所以提前设置这样的预防措施是好的。
    要想访问其他名字空间中的某个名字,最简单的方法是在这个名字前加上名字空间的名字作为限定 ( 例如std:cout 和 My code:main)。 “真正的 main() ”定义在全局名字空间中,换句话说,它不属于任何自定义名字空间、类或函数。要想获取标准库名字空间中名字的访问权,我们应该使用using指示:
    using namespace std;
    名字空间主要用于组织较大规模的程序组件,最典型的例子是库。使用名字空间,我们就可以很容易地把若干独立开发的部件组织成一个程序。

    展开全文
  • 1 问题 大型程序中往往会使用多个独立开发的库,库中不可...步骤一:名字空间定义 语法格式: namespace 名字空间名{ 名字空间成员1; 名字空间成员2; } 其中: 1)namespace是定义名字空间的关键字。 2)名

    1 问题

    大型程序中往往会使用多个独立开发的库,库中不可避免的出现同名的变量、函数或类、模板等,造成名称的冲突。名字空间是为了防止名字冲突提供的一种机制。通过使用namespace XXX可以将你所使用的库的变量、函数、类放入名字空间中,形成自己的作用域,避免名字冲突。

    2 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:名字空间的定义

    语法格式:

    namespace 名字空间名{

    名字空间成员1;

    名字空间成员2;

    }

    其中:

    1)namespace是定义名字空间的关键字。

    2)名字空间名与变量名一样是一个标识符,在定义它的作用域内必须保持唯一。

    3)名字空间成员可以是能出现在全局作用域中的任何声明,包括:变量、函数、结构体、类、模板及其他名字空间等。

    注意:

    1)名字空间结束后无需分号。

    2)名字空间可以在全局作用域内,也可以在其它名字空间中,但不能在函数或类的定义中。

    代码如下:

    namespace ns {
        int var = 0;
        void fun (void){
            int a = 10;
            std::cout << "a = " << a << std::endl;
        }
    }//注意此处无分号
    int main(int argc, const char * argv[])
    {
        std::cout << "ns::var = " << ns::var << std::endl;
        ns::fun();
        return 0;
    }

    上述代码中,定义了一个名字空间ns,其中包含两个成员,一个是整型变量var,另一个是函数fun。

    步骤二:名字空间的合并

    命名空间可以定义在几个不同的部分。

    代码如下:

    #include <iostream>
    namespace ns {
        int var = 0;
        void fun (void) {
            int a = 10;
            std::cout << "a = " << a << std::endl;
        }
    }
    namespace ns {
        struct type {
            int a;
            float b;
        };
    }
    int main(int argc, const char * argv[])
    {
        
        ns::type st = {10, 20.5};
        
        std::cout << "st.a = " << st.a << std::endl;
        std::cout << "st.b = " << st.b << std::endl;
        
        return 0;
    }

    上述代码中,名字空间ns被分在两个部分。第一部分之前没有ns的名字空间,所以会创建一个新的名字空间,但第二部分为已经存在的名字空间,所以不会新建名字空间,只是在已有的空间内添加成员。

    3 完整代码

    本案例中名字空间定义的完整代码如下所示:

    namespace ns {
        int var = 0;
        void fun (void){
            int a = 10;
            std::cout << "a = " << a << std::endl;
        }
    }//注意此处无分号
    int main(int argc, const char * argv[])
    {
        std::cout << "ns::var = " << ns::var << std::endl;
        ns::fun();
        return 0;
    }

    本案例中名字空间合并的完整代码如下所示:

    #include <iostream>
    namespace ns {
        int var = 0;
        void fun (void) {
            int a = 10;
            std::cout << "a = " << a << std::endl;
        }
    }
    namespace ns {
        struct type {
            int a;
            float b;
        };
    }
    int main(int argc, const char * argv[])
    {
        
        ns::type st = {10, 20.5};
        
        std::cout << "st.a = " << st.a << std::endl;
        std::cout << "st.b = " << st.b << std::endl;
        
        return 0;
    }

    名字空间的声明与定义可以分开

    1.问题

    名字空间的声明和定义可以分开,但是定义部分需要借助作用域限定操作符“::”指明所定义的成员隶属于哪个名字空间。

    2 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:名字空间的声明

    代码如下:

    #include <iostream>
    namespace ns {
        extern int var;
        void fun (void);
    }

    上述代码中,整型变量var前面加extern表示此变量将在名字空间外定义。

    步骤二:名字空间的定义

    代码如下:

    #include <iostream>
    namespace ns {
        extern int var;
        void fun (void);
    }
    int ns::var = 10;
    void ns::fun (void) {
        int a = 10;
        std::cout << "a = " << a << std::endl;
    }

    上述代码中由于是在名字空间外定义,所以必须使用名字空间名加作用域运算符ns::指明变量或函数是哪一个名字空间的。

    3 完整代码

    本案例中的完整代码如下所示:

    #include <iostream>
    namespace ns {
        extern int var;
        void fun (void);
    }
    int ns::var = 10;
    void ns::fun (void) {
        int a = 10;
        std::cout << "a = " << a << std::endl;
    }
    int main(int argc, const char * argv[])
    {
        
        std::cout << "ns::var = " << ns::var << std::endl;
        ns::fun();
        
        return 0;
    }

     

    展开全文
  •  定义名字空间中的实体称为名字空间的成员。  名字空间内的名字可以被该名字空间内的其他成员直接访问,名字空间外的代码必须指定该名字位于哪个名字空间。  一个名字空间可以包含多种类型的标识符,如下面...
  • C++:定义头文件/定义命名空间

    千次阅读 2020-02-26 22:25:33
    1.先在任意一个文件夹建立一个叫做hello.cpp的文件 2.在hello.cpp同一个...3.在myhead1.h文件中声明并定义一个函数方法,叫m1,这个m1什么都不做,就打印一句话"myhead1->m1" 4.在hello.cpp文件中调用m1方法 ...

    一:自定义头文件

    1.先在任意一个文件夹建立一个叫做hello.cpp的文件
    2.在hello.cpp同一个文件夹下,建立一个myhead1.h的文件
    3.在myhead1.h文件中声明并定义一个函数方法,叫m1,这个m1什么都不做,就打印一句话"myhead1->m1"
    4.在hello.cpp文件中调用m1方法

    假设现在D盘建立一个叫myhead1.h的文件,里面的内容只有

    void m1(void){
    	std::cout<<"myhead1->m1";
    }
    

    然后在D盘建立一个叫hello.cpp的文件,里面的内容只有

    #include <iostream>
    #include <stdlib.h>
    #include "myhead1.h"
    int main(){
    	m1();//因为上面include "myhead1.h",所以此处可以直接使用m1方法
    	system("pause");
    	return 0;
    }
    

    自定义头文件演示完毕,需要注意的是,引用自定义头文件的时候,include后面的是引号"",而不是尖括号<>
    二:自定义命名空间
    修改上述myhead1.h文件,变成

    namespace n1
    {
    	void m1(void){
    		std::cout<<"n1->myhead1->m1";
    	}
    }
    namespace n2
    {
    	void m1(void){
    		std::cout<<"n2->myhead1->m1";
    	}
    }
    

    现在myhead1.h中,有两个命名空间,一个叫n1一个叫n2,接下来分别调用这两个方法,代码如下

    #include <iostream>
    #include <stdlib.h>
    #include "myhead1.h"
    int main(){
    	//调用命名空间n1中的方法
    	n1::m1();
    	//调用命名空间n2中的方法
    	n2::m1();
    	system("pause");
    	return 0;
    }
    
    展开全文
  • c#定义名称空间或类型的别名

    千次阅读 2017-10-19 19:33:00
    using System; using System.Collections.Generic; using System.Text; namespace using_定义名称空间或类型的别名 { using A = System.Console;... using B = using_定义名称空间或类型的别名.Progra...
  • 名字空间中声明类和成员函数定义.pdf
  • C++命名空间定义与使用

    千次阅读 2019-09-03 14:44:01
    1、对C++命名空间的理解 以主函数调用cout为例,使用using namespace std的作用是为了调用cout时,区分...2、定义命名空间 #include <iostream> using namespace std; //1、定义命名空间 namespace spaceA...
  • 定义不受命名空间的约束 宏是在编译前预处理阶段处理的 定义的宏从define到undef或者文件尾有效,所以宏的作用域和它所在的代码块无关。
  • 名字空间是用来划分冲突域的,把全局名字空间划分成几个小的名字...首先我们看一下名字空间定义: 1 //MyLib.h文件 2 namespace MyLib{ 3 extern int i;//记住这是变量i的声明,不是i的定义 4 void fun(); 5 }/
  • .h中 namespace st{ int b; } int b;属于声明并定义,而在.h的命名空间中只能放声明,.h被引用多少次,int b就声明和定义了几次,为了解决这个问题,有如下解决方法: 方法一:
  • 解决C++重定义问题--匿名命名空间

    千次阅读 2019-10-30 17:47:56
    今天遇到一个命名空间定义的问题,程序框架大体如下: interface中定义的是一个namespace, 形式如下: namespade np { int a = 1; int b = 2; }; 并且三个module(1,2,3),以及core模块全都需要引用这个命名...
  • 命名空间中函数的定义和调用

    千次阅读 2019-06-29 16:49:07
    发现一个关于命名空间中的问题:即cpp文件中定义命名空间中的函数和调用命名空间中的函数,前者需要加域限定符,而后者则不需要 。 值得一提的是,当在 cpp 文件定义头文件中命名空间内的函数时,因为在定义时加上了...
  • 命名空间定义与使用

    千次阅读 2016-11-13 20:04:28
    1. 命名空间定义:由关键字 namespace后边接着命名空间名字,之后接一对花括弧括住的一块声明和定义; [html] view plain copy print? //17.2.A.h 头文件定义命名空间 primer_17_2 namespace...
  • C++ 命名空间以及自定义命名空间

    千次阅读 2019-09-25 22:31:21
    C++命名空间 1. C++中的命名空间 标准命名空间 namespace std C++在一般的库文件以及常规操作都需要包含C++标准的命名空间std,用户在使用等头文件时,C++标准把所有的有关stream中的关键字都加上了std的命名空间。...
  • test_a.h中有定义: namespace ns { class a {...}; } test_b.h中有定义: namespace ns { class b {...}; } test_c.h中有定义: namespace ns { class c {...}; } 然后,在test_c.cpp中有如下代码片段: #include ...
  • 命名空间(像std那样定义属于自己的专属空间)
  • C++名称空间详细解读

    2022-05-02 10:44:43
    预备概念 声明区域 可以在其中进行声明的区域,包括代码块,函数内部,单个文件,以及本文提到的命名空间。...它也是声明区域,故其中声明的名称不会与其他声明区域里的同名名称相冲突,名称空间可以是全局定义
  • XML 命名空间

    千次阅读 2018-11-23 23:30:20
    举例来说我们都可以定义自己的元素名,元素在一个xml文件里面它的含义是表格,在另一个xml文件里可以把它定义为桌子。示例如下代码:表格里可以有&amp;lt;tr&amp;gt;、&amp;lt;td&amp;gt;标签,桌子...
  • 2、而这里,命名空间中的类型声明只可以具有 public 或 internal 访问修饰符 3、默认是internal 访问级别 4、类中类是可以使用 private 的 总结 四个访问修饰符分别为private、protected、public、internal ...
  • C++命名空间是一个作用域的概念,而且是可以分割的作用域,不同于函数模块作用域{...},命名空间可以分在多个文件中定义,只要是属于统一名字空间的内容都拥有本命名空间的整体作用域,即本命名空间全体可见,不论...
  • C++ 命名空间

    2021-01-03 01:46:52
    因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间定义了上下文。本质上,命名空间就是定义了一个范围。 我们举一个计算机系统...
  • 一个变量应该有一个名字,并在内存中占据一定的存储单元,在该存储单元中存放变量的值。请注意区分变量名和变量值这两个不同的概念,见图2.6。 图2.6 变量名规则 先介绍标识符的概念。和其他高级语言一样,...
  • 在命名空间定义类型

    千次阅读 2014-06-23 11:32:57
    在命名空间定义类型   如果定义的类型要用于其他.NET 语言,应该把它们放在命名空间下,而不是模块中。这是因为模块在被编译成 C# 或其他.NET 语言时,被处理成类,在模块中定义的任何类型都成为这个类型内部的...
  • XML命名空间详解

    千次阅读 多人点赞 2019-08-09 10:26:06
    一、命名空间的意义 XML是一种非常好用的标记语言,它具有极好的可扩展性,因此当我们需要同时访问多份XML文档时,有可能会出现这样一种情况:在同一份XML文档中可能出现多个同名的标签和属性,而这些标签和属性意义...
  • 名称空间 名称空间(namespaces):用于存放名字与内存地址绑定... 全局名称空间:运行顶级代码所产生的名字,或者说除函数内定义以及内置的外,剩下的都是全局名称空间 生命周期:Python文件执行时产生,Python文件执行
  • oracle 查看表的定义

    千次阅读 2021-05-07 05:16:58
    select t.table_name 表名,c.comments 字段名称,t.column_name 字段编码,t.data_type || '(' || to_char(t.data_length) || ')' 类型FROM user_tab_cols t, user_col_comments cWHERE c.table_name = t.table_name...
  • 【C++】-命名空间的概念及使用

    千次阅读 2021-04-09 18:53:20
    本篇文章我将向大家介绍C++中一个非常重要的语法,命名空间的概念。 首先一开始我想先请大家一段C语言代码: #include <stdio.h> int scanf = 0; int main() { printf("%d\n", scanf); } 很简单的一段代码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 898,117
精华内容 359,246
关键字:

定义名称空间