C++命名空间的示例

文章目录

1、命名空间的定义和使用

为了避免命名冲突,需要使用命名空间。

1.1定义示例

namespace后面跟名称,再跟花括号。

cpp 复制代码
#include <iostream>
namespace A{
    int a = 10;
    //可以定义变量、函数等
    void print() {
        std::cout << "A namespace\n";
    }
}
namespace B {
    int a = 100;
    void print() {
        std::cout << "B namespace\n";
    }
}

std是C++标准命名空间,cout、cin等标准库中的类在使用时都要加上std::

using namespace std;是一下子引入std,后面就可以省略std::

1.2使用示例

通过::访问命名空间内的变量、函数:

cpp 复制代码
int main()
{
    std::cout << A::a << std::endl;
    std::cout << B::a << std::endl;
    A::print();
    B::print();
    std::cout << "Hello World!\n";
}

2、命名空间只能在全局范围内定义

如果在局部定义,例如定义在一个函数内,则会报错:

3、命名空间可以嵌套定义

A里面有个子命名空间B,使用B时,要写A::B

cpp 复制代码
#include <iostream>
namespace A{
    int a = 10;
    void print() {
        std::cout << "A namespace\n";
    }
    namespace B {
        int a = 100;
        void print() {
            std::cout << "B namespace\n";
        }
    }
}

int main()
{
    std::cout << A::a << std::endl;
    std::cout << A::B::a << std::endl;
    A::print();
    A::B::print();
    std::cout << "Hello World!\n";
}

4、命名空间设置别名

cpp 复制代码
#include <iostream>
namespace AAA{
    int a = 10;
}

int main()
{
    namespace A = AAA;
    std::cout << A::a << std::endl;
    std::cout << "Hello World!\n";
}

5、命名空间的声明和实现分开写

5.1声明

A.h文件:

cpp 复制代码
#pragma once
namespace A {
	extern int a;//声明变量a,比起函数需要额外用extern修饰
	void print();
}

5.2实现

A.cpp文件:

cpp 复制代码
#include <iostream>
#include "A.h"//不可缺

int A::a = 100;
void A::print() {
	std::cout << "A namespace\n";
}

5.3调用

cpp 复制代码
#include <iostream>
#include "A.h"

int main()
{
    std::cout << A::a << std::endl;//100
    A::print();
    std::cout << "Hello World!\n";
}