2016-09-27 142 views
-4

我只需要在這個主題上進行一次複習,但我不能在網上找到答案。C++ - 類與命名空間

如果你調用一個類Dog

class Dog 
{ 
public: 
    void Dog::woof() 
    { 
     return; 
    } 
}; 
  • 必備Dog開始與Dog::內的每一個功能?這就是我一直這樣做,但我想問的是任何情況不是這樣的情況?如果我不把Dog::這是否意味着它可以像使用Java的靜態方法一樣使用?防爆。 Dog.woof();代替myDogObj.woof();

  • 請問,我們使用的是::運營商意味着Woof是在Dog命名空間,即使Dog不是一個命名空間中的事實呢?如果這是真的,這是否意味着類自動創建自己作爲命名空間?

  • 爲什麼我們把Dog::告訴C++,它是屬於Dog的方法,而張女士它是class Dog內基本上是說了嗎?這不是多餘的嗎?

  • 是否有任何可以在命名空間或嵌套命名空間內聲明Dog::woof的情況?防爆。 Park::Trail::Dog::woof() { return; }

你必須做的:

class Dog 
{ 
public: 
    namespace Park 
    { 
     namespace Trail 
     { 
      void Dog::woof() 
      { 
       return; 
      }  
     } 
    } 
}; 
+3

最後一個例子是無稽之談,你不能在類的名字空間*裏面。 – molbdnilo

+0

如果我要在類中聲明'woof',那麼在類的外部定義它,但是我把這個函數定義放在一個名稱空間中呢?防爆。 '命名空間Park {void Dog :: woof(){return; }}' – Hatefiend

+1

除非'Park'聲明在'Park'命名空間中,否則它將不起作用。 Jus試試吧,你會看到的。 – Ceros

回答

2

必須狗裏面的每一個功能與狗開始::?這就是如何 我一直這樣做,但我想問是否有任何情況下, 不是這種情況?如果我不把Dog ::這意味着它可以是 像Java中的靜態方法一樣使用?防爆。 Dog.woof();而不是 myDogObj.woof();

沒有方法必須在類定義內部以Dog::開頭,只在其外部。

是否我們使用::運算符的事實意味着Woof在 Dog的命名空間中,即使Dog不是命名空間?如果這是 是真的,那麼這是否意味着類自動將它們自己創建爲 名稱空間?

是的,在Dog的範圍內。

爲什麼我們把狗::告訴C++,它是屬於犬 的方法,而這一事實,它是類犬的內部基本規定 已經?這不是多餘的嗎?

是的,這就是爲什麼你不這樣做。

+0

即使你把它放在'class Dog'的括號範圍之外,你也可以在'Dog'中定義一個方法嗎?您在「狗」之外定義的方法是否必須與「狗」在同一個'cpp'文件中? – Hatefiend

+0

@Hatefiend你在Dog中聲明它,你可以在其他地方定義它。不,它不。 –

+0

有沒有辦法在外面聲明和定義,還是隻能在外面定義? (我猜的是後者) – Hatefiend