¿Podemos escribir palabras clave abstractas en la clase C++?¿Puedo usar la palabra clave `abstracta` en la clase C++
Respuesta
No, C++ no tiene ninguna palabra clave abstracta. Sin embargo, puede escribir pure virtual functions; esa es la forma C++ de expresar clases abstractas.
No.
funciones virtuales puras, en C++, se declaran como:
class X
{
public:
virtual void foo() = 0;
};
Cualquier clase que tiene al menos uno de ellos se considera abstracto.
Es una palabra clave introducida como parte de la especificación de lenguaje C++/CLI para .NET framework.
... que no es C++. En serio, ref, eso es invasión ... – DevSolar
Técnicamente, es una extensión de Microsoft C++ para el código nativo, incluso si no se dirige a .NET, por lo que no es específico de C++/CLI. Solo una extensión, igual que '__interface' o' __declspec (property) '. Todavía no es ISO C++, por supuesto. –
Sin downvotes pero C++ implica C++ estándar. Cualquier implementación XYZ no estándar debe especificarse explícitamente y hasta que se haya realizado tal especificación, no hay razón para reconocer su existencia. – lorefnon
no, debe tener al menos una función virtual pura en una clase para que sea abstracta.
Aquí es una buena referencia cplusplus.com
#define abstract
No hay palabras clave 'abstracto' sino una función virtual pura se convierte en una clase a clase abstracta que se puede extender y re uso como una interfaz.
Como otros señalan, si agrega una función virtual pura, la clase se vuelve abstracta.
Sin embargo, si desea implementar una clase base abstracta sin miembros virtuales puros, me parece útil hacer que el constructor esté protegido. De esta manera, obligas al usuario a subclasificar el ABC para usarlo.
Ejemplo:
class Base
{
protected:
Base()
{
}
public:
void foo()
{
}
void bar()
{
}
};
class Child : public Base
{
public:
Child()
{
}
};
realmente palabra clave abstract
existe en C++ (VS2010 al menos) y me pareció que se puede utilizar para declarar una clase/struct como no instanciado.
struct X abstract {
static int a;
static void foX(){};
};
int X::a = 0;
struct Y abstract : X { // something static
};
struct Z : X { // regular class
};
int main() {
X::foX();
Z Zobj;
X Xobj; // error C3622
}
MSDN: https://msdn.microsoft.com/en-us/library/b0z6b513%28v=vs.110%29.aspx
'abstract' no es parte del estándar C++. – smerlin
No estándar, pero dado que es un control de cordura no funcional, se puede solucionar fácilmente con un '# define' condicional en otros compiladores según la respuesta de Ken. –
@cz ¿Qué logra '#define abstract'? –
no No se puede utilizar abstracto como una palabra clave .because allí no hay ninguna palabra clave resumen disponible en C++.
si desea hacer una clase como un resumen en C++, puede declarar al menos una función como pura función virtual.
pero en la clase derivada debe proporcionar la definición else da error de compilación.
EX:
class A
{
public :
virtual void sum()=0;
};
nota:
que puede utilizarse abstracto como un nombre de variable, nombre de la clase debido a lo anteriormente dicho que resumen no es una palabra clave en C++.
No, C++ no tiene palabra clave abstracta. Sin embargo, puede escribir funciones virtuales puras; esa es la forma C++ de expresar clases abstractas. Es una palabra clave introducida como parte de la especificación del lenguaje C++/CLI para .NET Framework. no, necesitas tener al menos una función virtual pura en una clase para que sea abstracta.
clase SomeClass { public: virtual void pure_virtual() = 0; // una función virtual pura
};
- 1. Palabra clave abstracta en PHP
- 2. usando una palabra clave abstracta en la interfaz
- 3. ¿Cómo puedo usar correctamente la palabra clave volátil en Java?
- 4. nueva palabra clave sin nombre de la clase en C#
- 5. ¿Cuándo se debe usar la palabra clave volátil en C#?
- 6. ¿Cuándo debemos usar la palabra clave extern alias en C#?
- 7. ¿Cuándo necesitaría usar la palabra clave stackalloc en C#?
- 8. ¿Cuándo debería usar la palabra clave "this" en C++?
- 9. ¿Cómo uso programáticamente la palabra clave "usar" en C#?
- 10. Cuándo usar la clase o interfaz abstracta?
- 11. C# ref uso de la palabra clave
- 12. Clang C Palabra clave 'clase' compilador?
- 13. ¿Cuándo debería usar la palabra clave "self"?
- 14. C++ const palabra clave: ¿usar liberalmente?
- 15. ¿Hay alguna ventaja de usar palabra clave volátil en contraste para usar la clase Interbloqueado?
- 16. C: Comportamiento de la palabra clave `const`
- 17. C: ¿Vale la pena la palabra clave en línea?
- 18. clase abstracta Refactoring en C#
- 19. ¿Necesita C# la palabra clave privada?
- 20. C++: estructura y la nueva palabra clave
- 21. Palabra clave de clase en Javascript
- 22. Por qué ejecutar el método definido con la palabra clave abstracta en la interfaz ejecutable
- 23. ¿Cómo usar la palabra clave 'referencias' en MySQL?
- 24. referencia a la clase abstracta
- 25. Derivar clase abstracta de la clase no abstracta
- 26. palabra clave "agradable" en C++?
- 27. C++/CLI equivalente de la palabra clave 'readonly' de C#
- 28. Constructor privado en la clase abstracta
- 29. clase concreta de la clase abstracta
- 30. ¿La nueva palabra clave 'dinámica' C# 4.0 desaprueba la palabra clave 'var'?
Claro, podemos hacerlo. Lamentablemente, el código no se compilará, aunque =) – SadSido
¿Qué pasa con la palabra clave abstracta en Visual C++ (específica de Micrsoft). No es estándar, o está bien implementado en mi opinión, pero cuenta, ¿verdad? : P – user965369
Además de las funciones virtuales puras en C++, marco las clases abstractas con un "A_" como prefijo de nombre de clase en cualquier idioma, p. Ej. "A_MyAbstractClass". Personalmente encuentro esto bastante útil. –