abstract(C++ 组件扩展)

abstract 关键字声明:

  • 类型用作基类型,但是,该类型无法实例化。

  • 类型成员函数在派生的类型只能定义。

所有平台

语法

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

备注

第一个示例语法声明类是抽象类。类声明 元素可以是本机 C++ 声明 (class 或 struct),或 c. c++ 扩展声明 (ref class 或 ref struct),如果 /ZW/clr 编译器选项指定。

第二个示例语法声明虚拟成员函数是抽象的。声明函数抽象声明它是一样的。一个纯虚函数。声明成员函数摘要还会导致封闭类声明为抽象。

abstract 关键字在本机代码和特定于平台的代码支持;即可以生成具有或不 /ZW/clr 编译器选项。

,如果类型是抽象的。 __is_abstract(type) 类型特征,可以检测在编译时。有关更多信息,请参见 编译器支持类型特征(C++ 组件扩展)

abstract 关键字是一种区分上下文的重写说明符。有关上下文相关关键字的更多信息,请参见 上下文相关的关键字(C++ 组件扩展)。有关重写说明符的更多信息,请参见 如何:声明在本机生成的重写说明符

Windows 运行时

b0z6b513.collapse_all(zh-cn,VS.110).gif要求

编译器选项: /ZW

公共语言运行时

b0z6b513.collapse_all(zh-cn,VS.110).gif要求

编译器选项: /clr

b0z6b513.collapse_all(zh-cn,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
};

请参见

概念

适用于运行时平台的组件扩展