对于类的名称能否和命名空间名称相同。我们可以看如下的实例:
定义命名空间和类名称相同:
//name.h
#pragma once
namespace li {
class li {
public :
void cotestout();
};
}
//name.cpp
#include <iostream>
#include "name\name.h"
using namespace std;
void li::li::cotestout() {
cout << "good" << endl;
}
然后测试test.cpp
#include <iostream>
#include "name\name.h"
using namespace std;
using namespace li;
int main() {
li col;
col.cotestout();
system("pause");
return 0;
}
其结果
如果改为
#include <iostream>
#include "name\name.h"
using namespace std;
int main() {
using li::li;
li col;
col.cotestout();
system("pause");
return 0;
}
可以运行通过。
菜鸟的我又想了一个问题,那么java的类和对象的命名是否可以一样。答案是否定的,因为对于static的方法就会出现错误,有时无法判断是类还是对象对函数的引用。唉,没办法,总想着这些稀奇古怪的问题。
如果命名空间和类名不同,不会出现不明确的错误。所以一定不要取相同的名字。
引用网上的类比:
如果你熟悉java的话,你可以这样理解,java中用包机制取代了所谓的命名空间。在java中一般是一个类一个文件的(原则上说多个类放一个文件下也没问题),然后相同功能的一组类文件组合成了一个包。 在C++中,namespace就相当于java中的包,单纯的头文件是不需要命名空间的,如果你想把多个类、辅助函数等等组合成一个整体,就用namespace。 命名空间是防止名称碰撞的机制,比如我有一个class A,你也有一个class A,那么我们在同一个程序下的话到底是用你的A还是我的A?在C++中就这样用I::A、Y::A,而java中则是I.A,Y.A