添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

class-declaration 类标识符 抽象{}

virtual return-type member-function-identifier () abstract ;

第一个示例语法将类声明为抽象类。 如果 /ZW /clr 编译器选项已指定,“类声明”组件可以是本机 C++ 声明( class struct ),也可以是 C++ 扩展声明(“ref class”或“ref struct”)

第二个示例语法将虚拟成员函数声明为抽象函数。 将函数声明为抽象函数等同于将其声明为纯虚拟函数。 将成员函数声明为抽象函数也会导致封闭类声明为抽象类。

本机专用代码和平台专用代码支持 abstract 关键字;也就是说,它可以使用或不使用 /ZW /clr 编译器选项进行编译。

在编译时,可以使用 __is_abstract(type) 类型特征来检测类型是否是 abstract。 有关详细信息,请参阅 编译器对类型特征的支持

abstract 关键字是上下文相关重写说明符。 若要详细了解上下文相关关键字,请参阅 上下文相关关键字 。 有关重写说明符的详细信息,请参阅 如何:在本机编译中声明重写说明符

Windows 运行时

有关详细信息,请参阅 ref class 和 ref struct

编译器选项: /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

.NET 和 UWP 的组件扩展

即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:https://aka.ms/ContentUserFeedback

提交和查看相关反馈