抽象 (C++/CLI 和 C++/CX)
abstract 關鍵字會宣告以下其中一個:
類型可以當做基底類型,但是類型本身無法具現化。
類型成員函式只能在衍生的類型中定義。
所有平台
語法
class-declaration class-identifier abstract {}
virtual
return-type member-function-identifier () abstract ;
備註
第一個範例語法會將類別宣告為抽象。 如果指定 或 編譯程式選項,類別宣告元件可以是原生C++宣告 (class
或 struct
), 或 C++ 擴充宣告 (ref 類別或 ref 結構)。/ZW
/clr
第二個範例語法會將虛擬成員函式宣告為抽象。 將函式宣告為抽象等同於將它宣告為純虛擬函式。 將成員宣告為抽象也會造成含括類別被宣告為抽象。
原生與平台特定程式碼支援 abstract 關鍵字;也就是說,編譯它時可以選擇使用或不使用 /clr
或 /ZW
編譯器選項。
您可以在編譯時間偵測某個類型是否是具有 __is_abstract(type)
類型特徵的抽象類型。 如需詳細資訊,請參閱類型特徵的編譯器支援。
abstract 關鍵字是視內容而有所區別的覆寫指定名稱。 如需內容相關性關鍵字的詳細資訊,請參閱即時線上關鍵字。 如需覆寫規範的詳細資訊,請參閱 如何:在原生編譯中宣告覆寫規範。
Windows 執行階段
如需詳細資訊,請參閱 Ref 類別與結構。
需求
編譯器選項:/ZW
通用語言執行平台
需求
編譯器選項:/clr
範例
下列程式碼範例會產生錯誤,因為類別 X
標示為 abstract。
// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
virtual void f() {}
};
int main() {
X ^ MyX = gcnew X; // C3622
}
下列程式碼範例會產生錯誤,因為它會具現化標示為 abstract的原生類別。 無論是否有 /clr
編譯器選項,都會發生此錯誤。
// abstract_keyword_2.cpp
class X abstract {
public:
virtual void f() {}
};
int main() {
X * MyX = new X; // C3622: 'X': a class declared as 'abstract'
// cannot be instantiated. See declaration of 'X'}
下列程式碼範例會產生錯誤,因為函式 f
包括定義,但標示為 abstract。 在範例中的最後一個陳述式會顯示宣告抽象虛擬函式相當於宣告純虛擬函式。
// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
virtual void f() abstract {} // C3634
virtual void g() = 0 {} // C3634
};