2.1 名字空间(1)

2013-10-07 15:27:42 · 作者: · 浏览: 77

第2章 从C到C++(www.cppentry.com)

由于标准(ANSI)C是C++(www.cppentry.com)的子集,许多标准C程序同时也是C++(www.cppentry.com)程序。但C++(www.cppentry.com)程序员用C++(www.cppentry.com)中更为有效的技术来替换C语言中的对应部分,并广泛地使用C++(www.cppentry.com)中的面向对象特性。

以下是一个简单的C++(www.cppentry.com)程序:

 

通过这个简单的C++(www.cppentry.com)程序,我们可以发现C语言与C++(www.cppentry.com)语言的一些区别:

除了支持C语言风格的注释/**/之外,C++(www.cppentry.com)语言还支持新的注释风格,即注释的内容可以从//开始并延续到行尾。

标准头文件(如iostream)不再具有扩展名dot.h。

标识符可以被限定在名字空间,以防止标识符名称的泛滥。如下语句行就说明这一点:

 

所有函数,包括main函数,都必须指明其返回类型。

C++(www.cppentry.com)用自己的输入/输出库替代C语言的输入/输出库(例如,使用cout可以替代printf)。

本章简述C语言与C++(www.cppentry.com)语言的区别,并介绍C++(www.cppentry.com)语言对C语言进行的扩展,同时介绍C++(www.cppentry.com)的输入/输出库。

2.1   名字空间(1)

C++(www.cppentry.com)提供名字空间(Namespace)来防止命名的冲突。例如,如果两个库都定义了cout,当一个应用程序需要使用这两个库时,将导致命名冲突。大型应用系统由许多人来完成,命名冲突是一种潜在的危险,程序员必须细心地定义标识符以保证名字的惟一性。名字空间std涵盖了标准C++(www.cppentry.com)的定义和声明,本书将例行地使用std。

例2-1

假设两个库都有变量inflag。如果每个库的设计者在名字空间里都包含了该变量,一个应用就能同时使用这两个库。在名字空间内进行定义的语法为:

 
 

一个名字空间由关键字namespace开始,通常后接一个像mfc或owl这样的名字来标识名字空间(本章C++(www.cppentry.com)补充材料介绍了无名字空间,并列出了所有的C++(www.cppentry.com)关键字)。在名字空间开始和结束的地方分别用左右大括号标记。

能在名字空间以外声明或定义的实体,同样也能在名字空间之内声明或定义,因此函数的声明或定义、变量的定义、typedef等都可以出现在名字空间中。

名字空间可以消除那些因重名而导致的命名冲突。

例2-2

依照例2-1中定义的名字空间,代码段

 

依次使用名字空间mfc的inflag和名字空间owl的inflag。名字空间(如owl)和变量名(如inflag)之间的符号::是域解析操作符。C++(www.cppentry.com)操作符及其优先级在图2-1中给出。

例2-3

我们用using声明来简化例2-2,以inflag代替mfc::inflag。代码段