不可或缺 Windows Native (15) - C++: 命名空间
作者:webabcd
介绍
不可或缺 Windows Native 之 C++
- 命名空间
示例
CppNamespace.h
#pragma once #include <string> using namespace std; // 定义一个命名空间,并在其中定义一个类以及声明一个函数
namespace NativeDll
{
class CppNamespace
{
public:
string Demo(); public:
string Demo2();
}; string demo3(); string demo4();
}
CppNamespace.cpp
/*
* 命名空间
*/ #include "pch.h"
#include "CppNamespace.h" using namespace NativeDll; // 不指定命名空间则是全局的
void namespace_demo1();
void namespace_demo2();
void namespace_demo3(); // 实现 NativeDll 命名空间中的函数
string CppNamespace::Demo() // 写全了就是 string NativeDll::CppNamespace::Demo()
{
// 命名空间的定义及使用
namespace_demo1(); // 命名空间的嵌套及使用
namespace_demo2(); // 没有名字的命名空间的定义及使用
namespace_demo3(); return Demo2() + demo3() + demo4();
} // 实现 NativeDll 命名空间中的函数
string NativeDll::demo3() // 必须要指定命名空间,否则就是全局的
{
return "demo3";
} // 实现 NativeDll 命名空间中的函数
namespace NativeDll
{
string CppNamespace::Demo2()
{
return "Demo2";
} string demo4()
{
return "demo4";
}
} // 定义 2 个命名空间
namespace ns1
{
string getString()
{
return "ns1";
}
}
namespace ns2
{
string getString()
{
return "ns2";
}
}
namespace ns2 // 命名空间是可以多次定义的
{
string getString2()
{
return "ns2 getString2";
}
} // 命名空间的使用
void namespace_demo1()
{
string result = ""; // 调用指定命名空间下的函数
result = ns1::getString(); // ns1
result = ns2::getString(); // ns2 // 引入指定的命名空间
using namespace ns2; // 之后 ns2 有效
result = getString(); // ns2 using namespace ns1; // 之后 ns1 和 ns2 同时有效
// result = getString(); // 编译错误,因为不明确 // 引入指定命名空间的指定函数
using ns1::getString; // 之后如果使用 getString() 函数,则其是来自 ns1 下的
result = getString(); // ns1 // using ns2::getString; // 编译错误,和 using ns1::getString; 冲突了
} // 定义 1 个嵌套的命名空间
namespace nsA
{
string getString()
{
return "nsA";
} namespace nsB
{
string getString()
{
return "nsB";
}
}
} void namespace_demo2()
{
string result = ""; // 嵌套命名空间的使用
result = nsA::nsB::getString(); // nsB // 可以为嵌套命名空间设置别名(非嵌套的命名空间也可以设置别名)
namespace ns = nsA::nsB;
result = ns::getString(); // nsB
} // 在名为 nsX 的命名空间下定义一个没有名字的命名空间
namespace nsX
{
// 匿名命名空间
namespace
{
string getStringAnonymous()
{
return "getStringAnonymous";
}
} // 内部可以直接调用没有名字的命名空间下的函数
string getString()
{
return "getString() " + getStringAnonymous();
}
} void namespace_demo3()
{
string result = ""; // 外部也可以直接调用指定命名空间下的匿名命名空间中的函数
result = nsX::getStringAnonymous(); // getStringAnonymous
result = nsX::getString(); // getString() getStringAnonymous
}
OK
[源码下载]
不可或缺 Windows Native (15) - C++: 命名空间的更多相关文章
- 不可或缺 Windows Native 系列文章索引
[源码下载] 不可或缺 Windows Native 系列文章索引 作者:webabcd 1.不可或缺 Windows Native (1) - C 语言: hello c 介绍不可或缺 Window ...
- 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native
[源码下载] 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native 作者:web ...
- 不可或缺 Windows Native (20) - C++: 友元函数, 友元类
[源码下载] 不可或缺 Windows Native (20) - C++: 友元函数, 友元类 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 友元函数 友元类 示例演 ...
- 不可或缺 Windows Native (11) - C++: hello c++, C++ 与 C语言的区别小介
[源码下载] 不可或缺 Windows Native (11) - C++: hello c++, C++ 与 C语言的区别小介 作者:webabcd 介绍不可或缺 Windows Native 之 ...
- 不可或缺 Windows Native (1) - C 语言: hello c
[源码下载] 不可或缺 Windows Native (1) - C 语言: hello c 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 在 Windows Sto ...
- 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换
[源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...
- 不可或缺 Windows Native (23) - C++: 虚函数
[源码下载] 不可或缺 Windows Native (23) - C++: 虚函数 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 虚函数 示例1.基类CppHuman ...
- 不可或缺 Windows Native (22) - C++: 多重继承, 虚基类
[源码下载] 不可或缺 Windows Native (22) - C++: 多重继承, 虚基类 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 多重继承 虚基类 示例1 ...
- 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)
[源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...
随机推荐
- 建立 svn 服务端
上一篇文章 (SVN 使用)是针对于客户端,本文是说明如何在本地设置服务端 1,建立服务端站点 svnadmin create /Users/hour/Desktop/svn 2,终端进入svn 里的 ...
- EF架构~XMLRepository仓储的实现
回到目录 对于数据仓储大家应该都很熟悉了,它一般由几个仓储规范和实现它的具体类组成,而仓储的接口与架构本身无关,对于仓储的实现,你可以选择linq2Sql,EF,Nosql,及XML 等等,之前我介绍 ...
- Nodejs·理解Buffer
Node里面的Buffer其实就是用于网络请求.文件读取等等操作,而且是分配在堆外,不会占用堆内的内存,这也是因为本来V8的内存就很小,如果读取大文件,那就...... 之前有看过Logstash的B ...
- Atitit ACID解决方案2PC(两阶段提交) 跨越多个数据库实例的ACID保证
Atitit ACID解决方案2PC(两阶段提交) 跨越多个数据库实例的ACID保证 1.1. ACID解决方案1 1.2. 数据库厂商在很久以前就认识到数据库分区的必要性,并引入了一种称为2PC( ...
- rabbitmq消息队列——"工作队列"
二."工作队列" 在第一节中我们发送接收消息直接从队列中进行.这节中我们会创建一个工作队列来分发处理多个工作者中的耗时性任务. 工作队列主要是为了避免进行一些必须同步等待的资源密集 ...
- Struts2中Action取得表单数据的几种方法
Struts2中Action取得表单数据的几种方法 Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form act ...
- oracle 中 rownum 和 row_number()
简单的介绍下oracle 中rownum 和 row_number() 使用,实例演示. 参照:http://www.cnblogs.com/zjrstar/archive/2006/08/31/49 ...
- 浏览器加载和渲染html的顺序
前阵子,在组内给大家做了一次关于“浏览器加载和渲染HTML的顺序”的分享,这里再总结一下吧. AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载! 1.浏览器加载和渲染html的顺序 浏 ...
- JavaScript之毒瘤
0.导言 JavaScript中有许多难以避免的问题特性.接下来就一一揭示. 1.全局变量 在所有JavaScript的糟糕特性中,最为糟糕的就是全局变量的依赖.全局变量使得在同一个程序中运行独立的子 ...
- 哈夫曼树(三)之 Java详解
前面分别通过C和C++实现了哈夫曼树,本章给出哈夫曼树的java版本. 目录 1. 哈夫曼树的介绍 2. 哈夫曼树的图文解析 3. 哈夫曼树的基本操作 4. 哈夫曼树的完整源码 转载请注明出处:htt ...