我看到這個構造:「class」在構造函數中的含義是什麼?
MyClass(class MyOtherClass* = 0) {}
什麼是class
關鍵字是什麼意思?構造函數是否使用MyOtherClass
指針並將參數默認爲空指針?
我看到這個構造:「class」在構造函數中的含義是什麼?
MyClass(class MyOtherClass* = 0) {}
什麼是class
關鍵字是什麼意思?構造函數是否使用MyOtherClass
指針並將參數默認爲空指針?
這是一個前向聲明。 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
};
只是一個澄清點。 'MyOtherClass'不必在這裏完全定義,因爲所需要的只是一個指向它的指針。前向聲明告訴編譯器它需要知道的關於「MyOtherClass」的一切,以便生成一個指向它的指針。 –
@JohnDibling不限於指針。在這種情況下,它可以工作,因爲它是一個參數。就我所知,只需要對象成員的完整定義(指針成員,引用,參數和返回類型不需要完整定義)。 –
如果我可以簡單地包含聲明'MyOtherClass'的頭文件,我爲什麼要這麼做? – Andreas
哇!我還沒有看到這樣的語法,有趣的,+1 –
@KirilKirov:但你確實看到'struct tm *'不是嗎? –
@MatthieuM。 - 絕對。我一直在想這個,寫這個評論:) –