簡體   English   中英

C++ - 帶類的命名空間

[英]C++ - Namespaces with Classes

我只需要復習一下這個主題,但我真的無法在網上找到答案。

如果你有一個叫做Dog的類

class Dog
{
public:
    void Dog::woof()
    {
        return; 
    }   
};
  • Dog每個函數都必須以Dog::開頭嗎? 我一直都是這樣做的,但我想問一下有沒有情況不是這樣的? 如果我不放Dog::是否意味着它可以像 Java 中的靜態方法一樣使用? 前任。 Dog.woof(); 而不是myDogObj.woof();

  • 我們使用::運算符的事實是否意味着WoofDog的命名空間中,即使Dog不是命名空間? 如果這是真的,這是否意味着類也會自動將自己創建為命名空間?

  • 為什么我們用Dog::來告訴 C++ 它是一個屬於Dog的方法,而實際上它在class Dog內部這一事實本質上已經表明了這一點? 那不是多余的嗎?

  • 有沒有可以在命名空間或嵌套命名空間內以某種方式聲明Dog::woof情況? 前任。 Park::Trail::Dog::woof() { return; }

你是否必須這樣做:

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

Dog 中的每個函數都必須以 Dog:: 開頭嗎? 我一直都是這樣做的,但我想問一下有沒有情況不是這樣的? 如果我不放 Dog:: 是否意味着它可以像 Java 中的靜態方法一樣使用? 前任。 Dog.woof(); 而不是 myDogObj.woof();

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

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

是的,在Dog的范圍內。

為什么我們用 Dog:: 來告訴 C++ 它是一個屬於 Dog 的方法,而實際上它在類 Dog 內部這一事實本質上已經表明了這一點? 那不是多余的嗎?

是的,這就是為什么你不這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM