共用方式為


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

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

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

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

所有平台

語法

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

備註

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

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

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

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

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

Windows 執行階段

如需詳細資訊,請參閱 Ref 類別與結構

b0z6b513.collapse_all(zh-tw,VS.110).gif需求

編譯器選項:/ZW

Common Language Runtime

b0z6b513.collapse_all(zh-tw,VS.110).gif需求

編譯器選項:/clr

b0z6b513.collapse_all(zh-tw,VS.110).gif範例

範例

下列程式碼範例會產生錯誤,因為類別 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
};

請參閱

概念

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