- 1、本文档共143页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
我们知道,如果局部变量和全局变量同名,在局部作用域内只有局部变量才起作用。在C++中可通过使用作用域限定符“::”来标识同名的全局变量。 int amount=123; // 全局变量 void main() { int amount=456; // 局部变量 cout::amount,; // 输出全局变量 coutamount,; // 输出局部变量 ::amount=789; // 访问全局变量 cout::amount,; // 输出全局变量 coutamount\n; // 输出局部变量 } 程序输出:123,456,789,456 2.6.3 作用域限定符:: 重点 在一个大型C++程序中,全局性的标识符存在重名的可能。为了避免全局标识符同名而引起的冲突,C++提出了命名空间(namespace)的概念。 所谓命名空间,是指标识符的各种可见范围,利用命名空间可以通过创建作用范围来对全局命名空间进行分隔。如果没有命名空间,这些变量、函数和类都存在于同一个全局命名空间中,可能会产生冲突。 一个命名空间确定了一个命名空间作用域。 2.6.4 命名空间 重点 命名空间声明的基本形式: namespace 命名空间名 { 变量声明 函数声明 类声明 … } 例如: namespace NS_A { int m, n; int func1() {return m+n; } void func2() { coutfunc1()endl; } } 命名空间声明的使用 在一个命名空间中声明的成员在该命名空间内可以被直接使用,不需要任何限定性修饰符。 命名空间中的成员主要是在该命名空间外被使用,必须有相应的使用规则。C++提供两种方法,实现在命名空间外使用其中的成员。 一种方法是在成员前面加上命名空间名和作用域限定符(::),如下所示: NS_A::m=15; NS_A::n=20; NS_A::func1(); 命名空间声明的使用 一种方法是利用using语句,using语句有以下两种方式: using namespace 命名空间名; using 命名空间名::成员标识符名; 第一种形式就是开放整个命名空间,该命名空间中的所有的成员都暴露于当前作用域中,即该命名空间中的所有成员在当前作用域下可以直接使用。第二种形式只是让一个命名空间中指定的成员暴露于当前作用域中,即只有该成员在当前作用域下可以直接使用。 例如: using NS_A; // 所有NS_A的成员当前都是可见的 using NS_A::m; // 只有m当前是可见的 using NS_A::func1; // 只有func1()当前是可见的 C++还支持一种匿名的命名空间,用于声明只有在当前文件中才可见的标识符。只有在声明这个匿名命名空间的文件中,命名空间中的成员能被使用。 匿名命名空间的声明与一般命名空间的声明形式相同,只是不要指定命名空间名。 例如: namespace { int m, n; int func1() {return m+n; } void func2() { coutfunc1()endl; } } 匿名的命名空间 标准C++库都定义在一个名为std的命名空间中,标准C++库中的变量、函数都属于命名空间std,如输入、输出流cin、cout等。 如果使用语句using namespace std,对std成员的引用无需再进行命名空间名限定,直接使用其中的成员,如直接使用cin、cout。注意,为了区别以前的库,标准C++库的头文件一般没有h后缀,如iostream。 如果不使用语句using namespace std,并且仍然使用标准C++库,就必须加上std命名空间限定,即: std::cin std::cout std命名空间 与变量类似,函数也有存储类型,不同存储类型的函数具有不同的作用域,在不同的范围为其他函数所调用。函数按其存储类型分为内部函数(static类型)和外部函数(extern类型)两类。 内部函数只能被同一个源文件中的函数所调用,而外部函数可以被其他源文件中的函数所调用。没有定义存储类型的函数都默认为外部函数。调用外部函数前必须先进行外部函数的声明。 2.6.5 函数的存储类型 File1.cpp源文件: int YourFun(int x , int y) { int temp; temp=x+y; return temp; } 例 定义并调用一个外部函数。在源文件File1.cpp中定义函数YourFun(),而在源文件File2.cpp中
文档评论(0)