using
指示符(using directive)使名字空间内的所有声明都可见,这样这些声明能够不加限定地使用。
using 声明(using declaration)提供了选择更为精细的名字可视性机制,它允许使名字空间中的单个声明可见。
例如:
例如:
#include "IBM_Canada_Laboratory.h"
// 使所有的名字都可见
using namespace IBM_Canada_Laboratory;
int main()
{
// ok: IBM_Canada_Laboratory::Matrix
Matrix mat( 4,4 );
// ok: IBM_Canada_Laboratory::Array
Array<int> ia( 1024 );
// ...
}
using 声明(using declaration)提供了选择更为精细的名字可视性机制,它允许使名字空间中的单个声明可见。
例如:
#include "IBM_Canada_Laboratory.h"
// 只让Matrix 可见
using IBM_Canada_Laboratory::Matrix;
int main()
{
// ok: IBM_Canada_Laboratory::Matrix
Matrix mat(4,4);
// error: IBM_Canada_Laboratory::Array not visible
Array<int> ia( 1024 );
// ...
}
名字空间机制允许我们把每个类放在单独的头文件中,但是仍然能把它们的名字封装到单个Cplusplus_Primer_3E 名字空间中。
练习2.21:
#include <iostream>
namespace Exercise {
template <class elemType>
class Array {
public:
// ...
Array( int size = DefaultArraySize ) {}
static const int DefaultArraySize = 12;
};
template <class Etype>
void print( Array< Etype > ) {
printf("Test for 2.21.\n");
} // ;
class String {
// ...
};
template <class listType>
class List {
public:
// ...
List( int size = DAS ) {}
static const int DAS = 12;
};
}
int main() {
using namespace Exercise;
const int size = 1024;
Array< String > as( size );
List< int > il( size );
// ...
Array< String > *pas = new Array<String>(as);
List <int> *pil = new List<int>(il);
print( *pas );
}