abstract (Extensiones de componentes de C++)
La palabra clave abstract declara uno de los siguientes:
Un tipo puede utilizarse como tipo base, pero el propio tipo no puede crear instancias.
Una función miembro de tipo únicamente se puede definir en un tipo derivado.
Todas las plataformas
Sintaxis
class-declaration class-identifier abstract {}
virtual return-type member-function-identifier() abstract ;
Comentarios
La sintaxis del primer ejemplo declara una clase como abstracta. El componente de class-declaration puede ser una declaración de C++ nativa (class o struct), o declaración de extensión de c++.ref class (o ref struct) si se especifica la opción del compilador /ZW o de /clr .
La segunda sintaxis de ejemplo declara una función miembro virtual como abstracta. Declarar una función abstracta es lo mismo que declararla una función virtual pura. Declarar una función miembro abstracta también hace que la clase envolvente sea abstracta.
La palabra clave abstract es compatible con el código nativo y específico de la plataforma; 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 obtener más información, vea Compatibilidad de compilador para type traits (Extensiones de componentes de C++).
La palabra clave abstract es un especificador de invalidación contextual. Para obtener más información acerca de las palabras claves contextuales, vea Palabras clave contextuales (Extensiones de componentes de C++). Para obtener más información acerca de los especificadores de invalidación, vea Cómo: Declarar especificadores de invalidación y compilaciones nativas.
Windows en tiempo de ejecución
Para obtener más información, vea Clases y structs de referencia.
Requisitos
Opción del compilador: /ZW
Common Language Runtime
Requisitos
Opción del compilador: /clr
Ejemplos
Ejemplo
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
}
Ejemplo
El ejemplo de código siguiente genera un error porque crea instancias de una clase nativa marcada como abstract. Este error se produce 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'}
Ejemplo
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 abstracta es equivalente a declarar una función virtual pura.
// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
virtual void f() abstract {} // C3634
virtual void g() = 0 {} // C3634
};
Vea también
Conceptos
Extensiones de componentes para plataformas de tiempo de ejecución