我剛剛發現C++/CLI在標準C++上有一個不存在的關鍵字(AFAIK):override
。顯式覆蓋虛函數
我對C++/CLI瞭解不多,因此,有人可以解釋其中包含哪些用途,以及它是否可以添加到C++中?
我剛剛發現C++/CLI在標準C++上有一個不存在的關鍵字(AFAIK):override
。顯式覆蓋虛函數
我對C++/CLI瞭解不多,因此,有人可以解釋其中包含哪些用途,以及它是否可以添加到C++中?
override
是Microsoft特有的關鍵字擴展,可用於C++/CLI和Visual C++實現。它類似於Java中的@Override
註釋或C#中的override
,並且提供更好的編譯時檢查,以防您不覆蓋您的意圖。
從第一鏈路:
倍率指示管理類型的成員必須重寫基類或鹼接口構件。如果沒有成員可以重寫,編譯器會產生一個錯誤。
覆蓋在編譯原生目標時(無/ clr)也是有效的。請參閱覆蓋說明符和本機編譯以獲取更多信息。
override是一個與上下文相關的關鍵字。有關更多信息,請參閱上下文相關關鍵字。
從C++ 11標準開始,override
說明符現在是標準化關鍵字。支持仍然有限,按照此page from Apache StdCxx,GCC 4.7+,Intel C++ 12.0+和Visual C++ 2012(支持Visual C++ 2005中的預標準化)支持override
。
它可以幫助編譯器抓住你的錯誤有兩種方式:
如果你聲明一個函數在您的類override
,但基類不具有的功能,那麼編譯器可以告訴你,你並不是在壓倒你認爲你是什麼。如果override
不可用,那麼編譯器將無法識別您的錯誤 - 它只會假定您打算引入一個新函數。
如果你在你的子類(沒有override
)中有一個函數,然後你在基類中聲明瞭與虛函數相同的函數,編譯器會告訴你,你在基類中的改變影響了在後代的原始聲明。後代將需要使用override
,否則您需要更改其中一個功能的簽名。
此功能已被添加到C++ 0x。
C++/CLI中的override關鍵字來自.Net,而不是C++本身的一部分。由於覆蓋已經被解釋,您需要知道替代方案。如果你不「覆蓋」它,你可能想要使它成爲「新」。通過使其成爲「新」,您不會覆蓋子級中的父類成員,而是會創建一個具有相同名稱的新成員。當您使用基類指針並將其指向派生類對象時,新的覆蓋關鍵字只有不同。
所以,如果你使用一個基類指針和指向一個派生類對象:
If you call an "override"n member:
the derived class member is called
if you call the "new"ed member:
the base class member is called.
你沒有說你在想什麼的關鍵字是。它是「明確的」嗎?如果是這樣,它是在標準的C++。 – 2011-01-28 19:45:35
@West Hardaker其實我說過。這是「覆蓋」關鍵字。 – kunigami 2011-01-28 19:47:30