C++自定义命名空间
使用关键字namespace
namespace namespace_name
{
	//代码声明
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
   | #include<iostream> using namespace std; using std::cout; namespace print_myname{     void func()     {     	cout<<"myname: shansan"<<endl; 	} }
  namespace print_font{     void func_1()     {     	std::cout<<"什么鬼 !"<<endl; 	} }
 
  using namespace print_myname; using namespace print_font;
  int main() { 	 	func();
  	 	func_1(); 	return 0; }
   | 
 


不连续的命名空间
命名空间可以定义在几个不同的部分中,因此命名空间是由几个单独定义的部分组成的。一个命名空间的组成部分可以分布在多个文件中
所以,如果命名空间中某个组成部分需要请求定义在另一个文件中的名称,仍然需要声明该名称。
下面的命名空间可以定义一个新的命名空间,也可以是为已有的命名空间增加新的元素。
namespace namespace_name
{
    //代码生明
}
嵌套的命名空间
可以在一个命名空间中定义另一个命名空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
   | #include<iostream> using namespace std;
  namespace my_firstname { 	void print_firstname() 	{ 		cout<<"shan "; 	} 	namespace my_lastname 	{ 	    void print_lastname() 		{ 			cout<<"san"<<endl; 		} 	} }
 
  using namespace my_firstname::my_lastname;
  int main() { 	 	
  	print_lastname(); 	return 0; }
   | 
 
C++异常处理
- 异常是在程序执行期间产生的问题。
 
- C++异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作。
 
- 异常提供了一种转移程序控制权的方式。
 
C++异常处理关键字
throw:当问题出现时,程序会抛出一个异常。通过throw关键字来完成。 
catch:在想要处理问题的地方,通过异常处理程序捕获异常。catch关键字用于捕获异常。 
try:try块中的代码标识将被激活的特定异常。他后面通常跟着一个或者多个catch块
如果您想让 catch 块能够处理 try 块抛出的任何类型的异常,则必须在异常声明的括号内使用省略号... 
1 2 3 4 5 6 7 8
   | try 	{ 	    //被保护代码块 	} 	catch(...)     {         //能处理任何异常代码     }
   | 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
   | #include<iostream> using namespace std;
  double division(double a,double b) { 	if(b == 0) 	{ 		throw "Division by zero condition!"; 	} 	return (a/b); }
  int main() { 	int a,b; 	double temp; 	scanf("%d%d",&a,&b); 	try 	{ 		temp = division(a,b); 		cout<<temp<<endl; 	} 	
  	catch(const char *msg) 	{ 		cerr<<msg<<endl; 	}
  	return 0; }
   | 
 
