共用方式為


abstract (C++ 元件擴充功能)

abstract 關鍵字會宣告兩者中的任一個:

  • 型別可以當做基底型別,但是型別本身無法執行個體化。

  • 型別成員函式只能定義於衍生型別中。

所有平台

語法

class-declaration class-identifier abstract {}
virtual return-type member-function-identifier() abstract ;

備註

第一個範例語法會將類別宣告為抽象的。 如果指定 /ZW/clr 編譯器選項,則class-declaration元件可以是原生 C++ 宣告 (class或 struct) 或 C++ 延伸宣告 (ref class 或 ref struct)。

第二個範例語法將虛擬成員函式宣告為抽象。 宣告函式抽象就像是將其宣告為純虛擬函式一樣。 宣告成員函式抽象也會使封入類別宣告為抽象。

abstract 關鍵字支援原生和平台特定程式碼,也就是,可以使用或不使用 /ZW/clr 編譯器選項進行編譯。

您可以使用 __is_abstract(type) 型別特性,在編譯時期偵測型別是否為抽象。 如需詳細資訊,請參閱類型特性的編譯器支援 (C++ 元件擴充功能)

abstract 關鍵字是內容相關性覆寫規範。 如需內容相關性關鍵字的詳細資訊,請參閱視內容而有所區別的關鍵字 (C++ 元件擴充功能)。 如需覆寫規範的詳細資訊,請參閱HOW TO: 宣告原生編譯中的覆寫規範

Windows 執行階段

如需類別和結構的詳細資訊,請參閱 Ref classes and structs

需求

編譯器選項:/ZW

Common Language Runtime

需求

編譯器選項:/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
};

請參閱

概念

執行階段平台的元件擴充功能