小古银的官方网站(完整教程):http://www.xiaoguyin.com/
C++入门教程视频:https://www.bilibili.com/video/av20868986/
目录
命名空间的简单定义
namespace
定义命名空间ns1
,写法如下:
#include <iostream>
// 命名空间ns1
namespace ns1
{
using test_t1 = int;
using test_t2 = float;
}
int main(void)
{
using namespace std;
ns1::test_t1 num = ns1::test_t1();
cout << num << endl;
return 0;
}
test_t1
和test_t2
的定义可以像下面这样拆开:
#include <iostream>
// 命名空间ns1
namespace ns1
{
using test_t1 = int;
}
// 命名空间ns1
namespace ns1
{
using test_t2 = float;
}
int main(void)
{
using std::cout;
using std::endl;
ns1::test_t1 num1 = ns1::test_t1();
ns1::test_t2 num2 = ns1::test_t2();
cout << num1 << num2 << endl;
return 0;
}
多重命名空间的写法,以下第二种namespace ns3::ns4
叫做嵌套命名空间:
#include <iostream>
// 命名空间ns1
namespace ns1
{
// 命名空间ns2
namespace ns2
{
using test_t = int;
}
}
// 以上代码可以简写成类似以下这样
namespace ns3::ns4
{
using test_t = int;
}
int main(void)
{
ns1::ns2::test_t num1 = ns1::ns2::test_t();
ns3::ns4::test_t num2 = ns3::ns4::test_t();
std::cout << num1 << num2 << std::endl;
return 0;
}
命名空间里的函数
基础示例
#include <iostream> // std::cout std::endl
namespace ns
{
void show(int num);
}
int main(void)
{
ns::show(12345);
return 0;
}
void ns::show(int num)
{
std::cout << num << std::endl;
}
基础讲解
实际工程中函数声明和函数定义一般都是分开的,就是以上写法,当然也可以将函数定义也写在命名空间ns
里面。
命名空间里的类
基础示例 1
#include <iostream> // std::cout std::endl
namespace ns
{
class test
{
public:
test(int num);
void show(void) const noexcept;
private:
int m_value;
};
}
int main(void)
{
ns::test obj(12345);
return 0;
}
ns::test::test(int num)
: m_value(num)
{
}
void ns::test::show(void) const noexcept
{
std::cout << m_value << std::endl;
}
基础示例 2
也可以只将类的前置声明放到命名空间里。
#include <iostream> // std::cout std::endl
namespace ns
{
class test;
}
int main(void)
{
ns::test obj(12345);
return 0;
}
class ns::test
{
public:
test(int num);
void show(void) const noexcept;
private:
int m_value;
};
ns::test::test(int num)
: m_value(num)
{
}
void ns::test::show(void) const noexcept
{
std::cout << m_value << std::endl;
}
补充知识(了解即可)
嵌套命名空间是从C++17开始加入。