abstract (C++/CLI y C++/CX)
La palabra clave abstract declara si:
Un tipo se puede utilizar como un tipo base, pero no puede instanciarse por sí mismo.
Un tipo de función de miembro solo puede definirse en un tipo derivado.
Todas las plataformas
Sintaxis
class-declaration class-identifier abstract {}
virtual
tipo de valor devueltomember-function-identifier () abstract ;
Comentarios
La primera sintaxis de ejemplo declara una clase como abstracta. El componente class-declaration puede ser una declaración nativa de C++ (class
o struct
), o una declaración de extensión de C++ (ref class o ref struct) si se especifica la opción del compilador /ZW
o /clr
.
La segunda sintaxis de ejemplo declara una función de miembro virtual como abstracta. Declarar una función como abstracta es lo mismo que declararla como función virtual pura. Declarar una función de miembro abstracta también provoca que la clase de inclusión sea declarada abstracta.
La palabra clave abstract se admite en el código específico de plataforma y nativo; es decir, se puede compilar con o sin la opción del compilador /ZW
o /clr
.
Puede detectar en tiempo de compilación si un tipo es abstracto con el rasgo de tipo __is_abstract(type)
. Para más información, consulte Compatibilidad del compilador con rasgos de tipo.
La palabra clave abstract es un especificador de invalidación contextual. Para más información sobre las palabras clave contextuales, consulte Palabras clave contextuales. Para obtener más información sobre especificadores de invalidación, vea Procedimiento para declarar los especificadores de invalidación en compilaciones nativas.
Windows en tiempo de ejecución
Para obtener más información, consulte el artículo sobre las clases de referencia y structs.
Requisitos
Opción del compilador: /ZW
Common Language Runtime
Requisitos
Opción del compilador: /clr
Ejemplos
El ejemplo de código siguiente genera un error porque la clase X
está marcada como abstract.
// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
virtual void f() {}
};
int main() {
X ^ MyX = gcnew X; // C3622
}
El ejemplo de código siguiente genera un error porque crea una instancia de una clase nativa que está marcada como abstract. Este error ocurrirá con o sin la opción del compilador /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'}
El ejemplo de código siguiente genera un error porque la función f
incluye una definición, pero está marcada como abstract. La instrucción final del ejemplo muestra que declarar una función virtual como abstracta equivale a declarar una función virtual como pura.
// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
virtual void f() abstract {} // C3634
virtual void g() = 0 {} // C3634
};