栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++命名空间(学习笔记day3-2)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++命名空间(学习笔记day3-2)

一、c++命名空间

c语言中可以通过static关键字使得名字只得在本编译单元内可见(因为在大项目时,不可避免包含大量名字其中有重复的名字),在c++中通过一种命名空间(namespace)来控制对名字的访问,解决命名冲突。
1.运行结果

2.程序

#include 
using namespace std;
//定义一个名字为A的命名空间(变量、函数)
namespace A{
int a=100;
}
namespace B{
int a=200;
}
void test2()
{

    cout << "A中的a=" <void test2()
{
    namespace A{
    int a=100;
    }
    namespace B{
    int a=200;
    }
}

②命名空间可嵌套命名空间

namespace A {
    int a=1000;
    namespace B {
    int a=2000;
    }
}
void test3()
{
    cout<<"A中的a="<namespace A {
    int a=1000;
    int b=2000;
}
//将c添加到已有的命名空间A中
namespace A {
    int c=3000;
}
void test4()
{
    cout<<"A中的a="<namespace A {
    int a=1000;//全局变量
    void func()//函数在命名空间定义
    {
        
        cout<<"func遍历a="<
    //变量的使用
    cout<<"A中的a="<
    test5();
    return 0;
}

⑤命名空间中的函数可以在“命名空间”外边定义

namespace A {
    int a=1000;//全局变量
    void func();//函数声明而非函数定义
}
void A::func()//命名空间外部定义需要加作用域,成员函数,类似于在里面定义
{
    //访问命名空间的数据不用加作用域
    cout<<"func遍历a="<
   // 访问命名空间的数据需要加作用域
    cout<<"funb遍历a="<
    A::func();
    funb();
}

二、无名命名空间

无名命名空间,即命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static,使得其可以作为内部连续。
例如:

namespace{
 int a=10;
 void func()
     {cout<<"hello namespace"<
     cout<<"a:"< 
三、using使用命名空间 
1.using使用命名空间优缺点 

优点:简化了从命名空间的成员访问
缺点:容易冲突

//using使用命名空间
//优点:简化了从命名空间的成员访问
 #if 0
 namespace verLongName {
    int a=1000;
    void func(){cout<<"hello namespace"<
     //使用verLongName命名空间
     using namespace verLongName;
     cout<<"a="<
    int a=1000;
    void func(){cout<<"hello namespace"<
     int a=2000;
     //使用verLongName命名空间
     using namespace verLongName;
     cout<<"a="< namespace verLongName {
    int a=1000;
    void func(){cout<<"hello namespace"<
     //使用verLongName命名空间
     //int a=2000;局部变量中的a
     using verLongName::a;//和局部变量中a=2000冲突但不会和全局变量冲突
     cout<<"命名空间中的a="< namespace A{
 //重载函数 函数名+地址组合代表是函数的入后地址
 void func(){cout<<"无参的func"<cout<<"int中的func"<cout<<"int int中的func"<
     //using指明使用A中的func会对所有的func起作用
     using A::func;
     func();
     func(10);
     func(10,10);
 }

运行结果:

总结:
1、命名空间的定义(不能在函数内定义命名空间)
2、使用命名空间的成员最安全的方式:
命名空间名::成员名
3、“using namespace 命名空间名”代表使用整个命名空间
4、单独使用命名空间中的具体成员:“using 命名空间名::成员名”

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862051.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号