zoukankan      html  css  js  c++  java
  • 命名空间(namespace)// 友元函数

    17.2、命名空间

    命名空间(namespace)为防止名字冲突提供了更加可控的机制。命名空间能够划分全局命名空间,这样使用独立开发的库更加容易了。一个命名空间就是一个作用域,通过在命名空间内部定义库中的名字,库的作者(以及用户)可以避免全局名字固有的限制。

    1、命名空间的定义(以关键字namespace开始,后接命名空间的名字)

    namespace cplusplus_primer {
             class Sales_item ( /*... */ };
             Sales_item operator+(const Sales_item&,
                                                 const Sales_item&);
             class Query {
             public:
                   Query(const std::string&);
                   std::ostream &display(std::ostream&) const;
                   // ..
             };
             class Query_base { / * . . * /};
    }

    这段代码定义了名为cplusplus_primer的命名空间,它有四个成员:两个类,一个重载的+操作符,一个函数。

    命名空间可以在全局作用域或者其他作用域内部定义,但不能在函数或者类内部定义。

    命名空间内部可以放入:类,变量(以及它们的初始化),函数(以及它们的定义)、模板,以及其他命名空间。

    命名空间中定义的名字可以被命名空间中的其他成员直接访问,命名空间外部的代码必须指出名字定义在哪个命名空间中。

    从命名空间外部使用命名空间成员时,可以编写using声明:

    using cplusplus_primer::Query;

    在这个using声明之后,程序可以无需cplusplus_primer限定符而直接使用名字Query。

    2、命名空间可以是不连续的,与其他作用域不同,命名空间可以在几个部分中定义。命名空间由它的分离定义部分的总和构成,命名空间是累积的。一个命名空间的分离部分可以分散在多个文件中,在不同文本文件中的命名空间定义也是累积的。

    命名空间可以不连续意味着,可以用分离的接口文件和实现文件构成命名空间,因此,可以用与管理自己的类和函数定义相同的方法来组织命名空间:

    (1)定义类的命名空间成员,以及作为类接口的一部分的函数声明与对象声明,可以放在头文件中,使用命名空间成员的文件可以包含这些头文件。

    (2)命名空间成员的定义可以放在单独的源文件中。

    [注]定义多个不相关类型的命名空间应该使用分离的文件,表示该命名空间定义的每个类型。

    友元函数

    如果在本类以外的其它地方定义了一个函数(这个函数可以是不属于任何类的非成员函数,也可以是其它类的成员函数),在类体中用friend对该函数进行声明,此函数就称为本类的友元函数。一个类的友元函数可以访问这个类中的private成员。
  • 相关阅读:
    深入揭秘HTTPS安全问题&连接建立全过程
    申请https证书需要注意的4大问题
    如何排查APP服务端和客户端是否支持ATS
    Apache和Nginx配置支持苹果ATS方法
    服务器配置ssl证书支持苹果ATS方法
    HTTPS背后的加密算法
    图解HTTPS协议加密解密全过程
    Java单例模式——并非看起来那么简单
    flask+mako+peewee(上)
    [转]ubuntu中查找软件的安装位置
  • 原文地址:https://www.cnblogs.com/rong86/p/3454026.html
Copyright © 2011-2022 走看看