2009.9.17-名字空间

来源:互联网 发布:黄维德的周瑜 知乎 编辑:程序博客网 时间:2024/05/01 19:43

global scope的最大问题是唯一的,在大型的软件项目中,如果在这个SCOPE中放置各种符号名称,往往导致名字冲突的产生

不举例了。名字空间

 namespace qiuyoujie{

const double BOOK_VERSION = 2.0;

class Handle{...};

}

使用方法1,在某scope内将namespace汇入,void f(){using namespace qiuyoujie;...}

             2,个别符号汇入,void f(){using qiuyoujie::BOOK_VERSION;...}

             3,使用时,明确加以限定修饰 void f(){cout<<qiuyoujie::BOOK_VERSION;...}

使用typedef或reference 可以使客户使用未加修饰的性别名称和对象名称。

                 const double& BOOK_VERSION = qiuyoujie::BOOK_VERSION;

                 typedef qiuyoujie::BOOK_VERSION BOOK_VERSION;

  remember: static data member should be initialized outside the interface.

 

item 29;避免传回内部数据的handles

   class String{  public:

                         String(const char* value);                        

                         operator char*()const;

                         private:char *data;};

 const String B("Hello,World");  //B is a const object;

      // 快速但有缺陷的实现

    inline String::operator char *()constd

      {return data;}             //返回了底层数据源本而非副本

   //比较慢但安全的实现

    inline String ::operator char*()const

      {char *copy = new char[strlen(data)+1];

       strcpy(copy,data);

       return copy;  //返回了一个副本,源本安全了不会被修改,但是必须记住要删除这个获得的指针。

      }

    

 

原创粉丝点击