¿Podemos escribir una palabra clave abstracta en la clase C++?
#define abstract
-
Si bien es divertido, esto sería un en realidad mala idea…
– DevSolar
2 de octubre de 2021 a las 8:02
-
Hay muchos lugares para ser gracioso en Internet. Este no es uno de esos.
– Arda
14 dic 2022 a las 19:21
DevSolar
No.
Las funciones virtuales puras, en C++, se declaran como:
class X
{
public:
virtual void foo() = 0;
};
Cualquier clase que tenga al menos uno de ellos se considera abstracta.
-
Falta el tipo de retorno. Además, el método debe ser virtual.
– Naveen
19 de agosto de 2009 a las 6:42
-
Absolutamente correcto, gracias. Hombre, tengo que sacar mi cabeza del mantenimiento del código y escribir código nuevo de vez en cuando: disuelve tu cerebro solo mirando los errores de otras personas. 😀
– DevSolar
19 de agosto de 2009 a las 9:10
No, C++ no tiene resumen de palabras clave. Sin embargo, puedes 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 el marco .NET.
no, debe tener al menos una función virtual pura en una clase para ser abstracto.
Aquí hay una buena referencia. cplusplus.com
Como señalan otros, 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 resulta útil proteger el constructor. De esta manera, obliga al usuario a subclasificar el ABC para usarlo.
Ejemplo:
class Base
{
protected:
Base()
{
}
public:
void foo()
{
}
void bar()
{
}
};
class Child : public Base
{
public:
Child()
{
}
};
en realidad palabra clave abstract
existe en C ++ (VS2010 al menos) y descubrí que se puede usar para declarar una clase/estructura como no instanciada.
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
03/02/2016 a las 23:10
-
No estándar, pero dado que es un control de cordura no funcional, se soluciona fácilmente con un condicional
#define
en otros compiladores según la respuesta de Ken.– cz
31 de julio de 2016 a las 19:24
-
@cz ¿Qué hace
#define abstract
¿lograr?– Stefan Stanković
28 de diciembre de 2016 a las 17:24
Claro, podemos hacerlo. Desafortunadamente, el código no se compilará, aunque =)
– SadSido
19 de agosto de 2009 a las 10:27
¿Qué pasa con la palabra clave abstracta en Visual C ++ (específico de Microsoft). No es estándar, o bien implementado en mi opinión, pero cuenta, ¿no? :PAG
– usuario965369
7 abr 2012 a las 20:26
Además de las funciones virtuales puras en C++, marco las clases abstractas con una “A_” como prefijo de nombre de clase en cualquier idioma, por ejemplo, “A_MyAbstractClass”. Personalmente encuentro esto bastante útil.
– Martín Meeser
18 de marzo de 2013 a las 11:58