2012-10-10 42 views
5

我看到這個構造:「class」在構造函數中的含義是什麼?

MyClass(class MyOtherClass* = 0) {} 

什麼是class關鍵字是什麼意思?構造函數是否使用MyOtherClass指針並將參數默認爲空指針?

+0

哇!我還沒有看到這樣的語法,有趣的,+1 –

+1

@KirilKirov:但你確實看到'struct tm *'不是嗎? –

+0

@MatthieuM。 - 絕對。我一直在想這個,寫這個評論:) –

回答

10

這是一個前向聲明。 MyOtherClass在使用之前不必定義,因此前向聲明就足夠了。 =0是參數的默認值。

題庫的情況下,你並不需要一個完整的定義:

  • 成員指針
  • 成員引用
  • 方法參數類型
  • 方法的返回類型

比較如下:

//MyClass.h 
class MyClass 
{ 
    MyClass(MyOtherClass* = 0) {} //doesn't compile 
            //doesn't know what MyOtherClass is 
}; 

//MyClass.h 
class MyClass 
{ 
    MyClass(class MyOtherClass* = 0) {} //compiles, MyOtherClass is declared 
}; 

//MyClass.h 
class MyOtherClass; //declare MyOtherClass 
class MyClass 
{ 
    MyClass(MyOtherClass* = 0) {} //compiles, declaration available 
}; 
+1

只是一個澄清點。 'MyOtherClass'不必在這裏完全定義,因爲所需要的只是一個指向它的指針。前向聲明告訴編譯器它需要知道的關於「MyOtherClass」的一切,以便生成一個指向它的指針。 –

+0

@JohnDibling不限於指針。在這種情況下,它可以工作,因爲它是一個參數。就我所知,只需要對象成員的完整定義(指針成員,引用,參數和返回類型不需要完整定義)。 –

+0

如果我可以簡單地包含聲明'MyOtherClass'的頭文件,我爲什麼要這麼做? – Andreas

相關問題