我记得被告知C ++类有自己的命名空间,并且类名可以用作范围解析的命名空间,如下所示:
// Example.h
class Example {
void Private();
public:
void Public();
}
以后,以类似的方式:
// Example.cpp
#include "Example.h"
using /*namespace*/ Example;
void Private() {}
void Public() {}
而不是:
// Example.cpp
#include "Example.h"
void Example::Private() {}
void Example::Public() {}
但是我在书中找不到任何解释或示例。谷歌的简短搜索也是一个死胡同。 这是真的吗?
答案 0 :(得分:3)
不,命名空间和类是不同的。
但是,名称空间和类都引入了范围,可以使用范围解析运算符::
来引用它。
using namespace N;
声明只能应用于名称空间。一个班级不可能做类似的事情。您只能对using Example::x;
内的特定名称x
Example
进行逐个导入。
当提供成员函数体外,你必须写Example::Private()
,没有其他选择。
答案 1 :(得分:0)
是的,每个类都有自己的命名空间,类声明的所有部分都属于。
您可以按照here所述的方式使用using指令。
应该注意的是,你不能声明一个与类同名的名称空间,如下所示:
namespace fubar
{
class snafu
{
...
};
}
// Cannot do stuff below (ERROR)
namespace fubar::snafu;
{
// this is not valid, once a class always a class
// once a namespace, always a namespace
// a class makes a namespace also but never JUST a namespace
}
但要小心。 “使用”过多会对你和那些继承你代码的人起到真正的诀窍。