程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第17章 用於大型程序的工具(11)

第17章 用於大型程序的工具(11)

編輯:C++入門知識

17.2.5 類、命名空間和作用域

1. 實參相關的查找與類類型形參

接受類類型形參(或類類型指針以引用形參)的且與類本身定義在同一命名空間中的函數(包括重載操作符),在用類類型對象(或類類型的引用及指針)作為實參的時候是可見的。


如果函數具有類類型形參就使得函數可見,其原因在於,允許無須單獨的using聲明就可以使用概念上作為類接口組成部分的非成員函數。能夠使用非成員操作對操作符函數特別有用。

//Namespace3.h  
#ifndef NAMESPACE3_H  
#define NAMESPACE3_H  
 
namespace Andersoft 

    class Class4{}; 
    void Method4(Class4 &c1){} 

 
#endif 
//Namespace3.h
#ifndef NAMESPACE3_H
#define NAMESPACE3_H

namespace Andersoft
{
 class Class4{};
 void Method4(Class4 &c1){}
}

#endifAndersoft::Class4 c4=Andersoft::Class4(); 
Method4(c4); 
 Andersoft::Class4 c4=Andersoft::Class4();
 Method4(c4);2. 隱式友元聲明與命名空間

當一個類聲明為友元函數的時候,函數的聲明不必是可見的。如果不存在可見的聲明,那麼,友元聲明具有將該函數或類的聲明放入外圍作用域的效果。如果類在命名空間內部定義,則沒有另外聲明的友元函數在同一命名空間中聲明。

因為該友元接受類類型實參並與類隱式聲明在同一命名空間中,所以使用它時可以無須使用顯式命名空間限定符。

//Namespace3.h  
#ifndef NAMESPACE3_H  
#define NAMESPACE3_H  
 
namespace Andersoft 

    namespace Namespace6 
    { 
        class Class5{}; 
        class Class4{ 
            friend class Class5; 
            friend void Method4(Class4 *c4); 
        }; 
    } 

void Andersoft::Namespace6::Method4(Andersoft::Namespace6::Class4 *c4){} 
 
#endif 
//Namespace3.h
#ifndef NAMESPACE3_H
#define NAMESPACE3_H

namespace Andersoft
{
 namespace Namespace6
 {
  class Class5{};
  class Class4{
   friend class Class5;
   friend void Method4(Class4 *c4);
  };
 }
}
void Andersoft::Namespace6::Method4(Andersoft::Namespace6::Class4 *c4){}

#endifAndersoft::Namespace6::Class4 *c4=new Andersoft::Namespace6::Class4(); 
Andersoft::Namespace6::Method4(c4); 
Method4(c4); 
 Andersoft::Namespace6::Class4 *c4=new Andersoft::Namespace6::Class4();
 Andersoft::Namespace6::Method4(c4);
 Method4(c4);

 摘自 xufei96的專欄
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved