C++命名空间的详解
命名空间
扩展:
C:面向过程:思想——功能分解,自顶向下,逐层细化;
程序=数据结构+算法
数据结构:对数据的存储方式
算法:操作数据的步骤(功能函数)
C++:面向对象(OOP):
思想——将算法和数据结构作为一个整体,称作对象;
对象=算法+数据结构
知识点1【C++的三大特性】
1、:: 作用域运算符(表明数据、方法的归属性问题)
在C语言中,当全局变量和局部变量同名时,无法直接使用局部变量(只能使用指针进行操作);但在C++中,可以使用双冒号::取全局变量。
#include <iostream>using namespace std;int a = 10;int main(int argc, char *argv[]){ int a = 20; cout <<"局部变量"<< a << endl; cout <<"全局变量"<< ::a << endl; return 0;}
运行结果:
2、C++命名空间(namespace)
2.1:作用:为了 解决C++工程代码命名冲突问题
namespace命名空间的定义:
2.2:本质:划分不同的作用域,用于管理函数名、类名、和变量名
注意:命名空间只能在全局范围内定义
#include <iostream>using namespace std;namespace A { int a = 100;}namespace B { int a = 200;}void test01(){ cout<<"A中a = "<<A::a<<endl; //A::a a属于A中的a cout<<"B中a = "<<B::a<<endl; //B::a a属于B中的a}int main(int argc, char *argv[]){ test01(); return 0;}
2.3:命名空间可以嵌套命名空间
#include <iostream>using namespace std; //命名空间的嵌套,不是局部定义namespace A { int a = 1000; namespace B { int a = 2000; }}void test01(){ cout<<"A中a = "<<A::a<<endl; //A::a a属于A中的a cout<<"B中a = "<<A::B::a<<endl; //B::a a属于B中的a,B属于A}int main(int argc, char *argv[]){ test01(); return 0;}
2.4:命名空间是开放的,随时可以加入新的成员,事先不知道要用,使用时才会添加:
#include <iostream>using namespace std;namespace A { int a = 100; int b = 200;}//将c添加到已有的命名空间A中namespace A { int c = 300;}void test01(){ cout<<"A中a = "<<A::a<<endl; cout<<"A中a = "<<A::b<<endl; cout<<"A中a = "<<A::c<<endl;}int main(int argc, char *argv[]){ test01(); return 0;}
2.5:命名空间可以存放变量和函数
函数在命名空间内定义:
#include <iostream>using namespace std;namespace A { int a = 100;//变量成员 void func()//函数 在命名空间内定义{ cout<<"func遍历a = "<<a<<endl;//不用写成A::a }}void test01(){ cout<<"A中a = "<<A::a<<endl;//在外部需要说明归属性 A::func();//函数的使用,也需要说明归属性}int main(int argc, char *argv[]){ test01(); return 0;}
2.6:命名空间中的函数可以在命名空间外定义,在内声明:
#include <iostream>using namespace std; namespace A { int a = 100;//变量成员 void func();//函数声明} #if 0void func()//普通函数{ cout<<"func遍历a = "<<a<<endl;}#endif void funb()//普通函数{ cout<<"funb遍历a = "<<A::a<<endl;} //函数在命名空间外定义时一定加作用域void A::func()//成员函数{ //访问命名空间的数据时不用加作用域 cout<<"func遍历a = "<<a<<endl;} void test01(){ A::func(); funb();} int main(int argc, char *argv[]){ test01(); return 0;}
运行结果:
2.7:无名命名空间(了解):
只能用在当前文件,不能被其他文件使用;
作用:类似于加static修饰,只能在本文件内部使用;
注意:一般不会定义无名的命名空间
2.8:命名空间别名(不常用):
类似于赋值的方法,不是typdef。
使用效果一样:
本文地址:百科问答频道 https://www.neebe.cn/wenda/918238.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!