zoukankan      html  css  js  c++  java
  • 命名空间

    //自定义一个命名空间,可以解决变量重名的问题

     1 #include <iostream>
     2 using namespace std;
     3 
     4 namespace myspace//自定义一个命名空间,可以解决变量重名的问题
     5 {
     6     int a(15);
     7 }
     8 
     9 void main()
    10 {
    11     int a(5);
    12 
    13     std::cout << "a=" << a << std::endl;//main函数a
    14 
    15     std::cout << "a=" << myspace::a << std::endl;//命名空间的a
    16 
    17     system("pause");
    18 }

    //自定义一个命名空间,可以解决函数重名的问题

     1 #include <iostream>
     2 using namespace std;
     3 
     4 namespace myspace//自定义一个命名空间,可以解决变量重名的问题
     5 {
     6     void print()
     7     {
     8         std::cout << "hello" << std::endl;
     9     }
    10 }
    11 
    12 void print()
    13 {
    14     std::cout << "world" << std::endl;
    15 }
    16 
    17 void main()
    18 {
    19     print();
    20 
    21     myspace::print();
    22 
    23     system("pause");
    24 }

    //匿名命名空间,变量、函数可以直接调用

     1 #include <iostream>
     2 using namespace std;
     3 
     4 namespace//匿名命名空间,变量、函数可以直接调用
     5 {
     6     int a(3);
     7     
     8     void print()
     9     {
    10         std::cout << "hello" << std::endl;
    11     }
    12 }
    13 
    14 void main()
    15 {
    16     std::cout << a << std::endl;
    17 
    18     print();
    19 
    20     system("pause");
    21 }

    //命名空间别名

     1 #include <iostream>
     2 using namespace std;
     3 
     4 namespace run
     5 {
     6     int a(3);
     7 
     8     char *str("hello");
     9 }
    10 namespace r = run;//命名空间别名
    11 
    12 void main()
    13 {
    14     std::cout << r::a << std::endl;
    15 
    16     std::cout << r::str << std::endl;
    17 
    18     system("pause");
    19 }

    //使用了using namespace以后,调用命名空间成员可以不用写命名空间名称了

     1 #include <iostream>
     2 using namespace std;
     3 
     4 namespace run
     5 {
     6     int a(3);
     7 
     8     char *str("hello");
     9 }
    10 using namespace run;
    11 
    12 void main()
    13 {
    14     std::cout << a << std::endl;//使用了using namespace以后,调用命名空间成员可以不用写命名空间名称了
    15 
    16     system("pause");
    17 }

    //命名空间的嵌套

     1 #include <iostream>
     2 using namespace std;
     3 
     4 namespace run
     5 {
     6     int a(3);
     7     char *str("hello");
     8 
     9     namespace runrun//命名空间的嵌套
    10     {
    11         int a(9);
    12     }
    13 }
    14 using namespace run;
    15 
    16 void main()
    17 {
    18     std::cout << run::a << std::endl;
    19 
    20     std::cout << run::runrun::a << std::endl;//命名空间的嵌套
    21 
    22     system("pause");
    23 }

    //命名空间的拓展

     1 #include <iostream>
     2 using namespace std;
     3 
     4 namespace run
     5 {
     6     int a(3);
     7     char *str("hello");
     8 }
     9 using namespace run;
    10 
    11 namespace run//命名空间的拓展
    12 {
    13     int y(5);
    14 
    15     //int a(6);//error C2374: “run::a”: 重定义;多次初始化
    16 }
    17 
    18 void main()
    19 {
    20     std::cout << run::y << std::endl;//命名空间的拓展
    21 
    22     system("pause");
    23 }

    软件开发注意事项

    //一般不要在命名空间内定义函数,而是定义一个函数指针,方便维护

     1 #include <iostream>
     2 using namespace std;
     3 
     4 namespace run
     5 {
     6     int a(3);
     7     int(*padd)(int, int);//函数指针,指向一个外部函数
     8 
     9 }
    10 using namespace run;
    11 
    12 int add(int a, int b)//一般不要在命名空间内定义函数,而是定义一个函数指针,方便维护
    13 {
    14     return a + b;//今天客户只要求一个返回结果
    15 }
    16 
    17 int addp(int a, int b)
    18 {
    19     std::cout << a << " " << b << std::endl;//明天客户可能要求增加一个打印结果功能
    20     return a + b;
    21 }
    22 
    23 void main()
    24 {
    25     std::cout << run::y << std::endl;//命名空间的拓展
    26 
    27     system("pause");
    28 }

    命名空间所有的数据,函数、类、对象都是公有的

    命名空间是透明的,不允许定义private, public, protected

    //命名空间内部可以有类

     1 #include <iostream>
     2 using namespace std;
     3 
     4 namespace run
     5 {
     6     int a(3);
     7 
     8     class myclass//命名空间内部可以有类
     9     {
    10     public:
    11         int a;
    12     };
    13 }
    14 using namespace run;
    15 
    16 void main()
    17 {
    18 
    19     system("pause");
    20 }

    //using必须在命名空间的下方,作用域从此往下,仅在此源文件有效

     1 #include <iostream>
     2 using namespace std;
     3 
     4 namespace mydata
     5 {
     6     int a(6);
     7 }
     8 using namespace mydata;//using必须在命名空间的下方,作用域从此往下,仅在此源文件有效
     9 
    10 void go()
    11 {
    12     std::cout << a << std::endl;
    13 }
    14 
    15 void main()
    16 {
    17     go();
    18 
    19     system("pause");
    20 }

    //如果2个命名空间的变量重名,会出现不明确错误,这是需要加上命名空间修饰符::

     1 #include <iostream>
     2 using namespace std;
     3 
     4 namespace mydata
     5 {
     6     int a(6);
     7 }
     8 using namespace mydata;
     9 
    10 namespace yourdata
    11 {
    12     int a(9);
    13 }
    14 using namespace yourdata;
    15 
    16 void go()
    17 {
    18     std::cout << yourdata::a << std::endl;//如果2个命名空间的变量重名,会出现不明确错误,这是需要加上命名空间修饰符::
    19 }
    20 
    21 void main()
    22 {
    23     go();
    24 
    25     system("pause");
    26 }

    //using如果在块语句内容,作用域是定义开始到块语句结束

     1 #include <iostream>
     2 using namespace std;
     3 
     4 namespace mydata
     5 {
     6     int a(6);
     7 }
     8 using namespace mydata;
     9 
    10 void go()
    11 {
    12     using namespace mydata;
    13 
    14     std::cout << a << std::endl;//using如果在块语句内容,作用域是定义开始到块语句结束
    15 }
    16 
    17 void main()
    18 {
    19     go();
    20 
    21     system("pause");
    22 }

    //C出现全局变量和局部变量重命名时,无法引用全局变量

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int a = 1;
     5 
     6 void main()
     7 {
     8     printf("%d
    ", a);//1
     9 
    10     a = 3;//C出现全局变量和局部变量重命名时,无法引用全局变量
    11 
    12     printf("%d
    ", a);//3
    13 
    14     system("pause");
    15 }

    //C++出现全局变量和局部变量重命名时,通过双冒号::全局域引用全局变量

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int a = 998;//全局变量
     5 
     6 void main()
     7 {
     8     int a = 10;//局部变量
     9 
    10     std::cout << a << std::endl;//10
    11 
    12     std::cout << ::a << std::endl;//998,双冒号::是全局域,C++出现全局变量和局部变量重命名时,通过双冒号::全局域引用全局变量
    13 }
  • 相关阅读:
    中间件(1)分布式缓存
    大型网站架构演进(9)服务化
    大型网站架构演进(8)业务拆分
    大型网站架构演进(7)数据库拆分
    大型网站架构演进(6)使用NoSQL和搜索引擎
    大型网站架构演进(5)数据库读写分离
    大型网站架构演进(4)使用应用服务器集群
    大型网站架构演进(3)使用缓存改善网站性能
    大型网站架构演进(2)数据库与应用服务器分离
    大型网站架构演进(1)单机网站
  • 原文地址:https://www.cnblogs.com/denggelin/p/5642202.html
Copyright © 2011-2022 走看看