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。
提交和查看相关反馈