resueltos poo interfaz interfaces entre ejercicios ejemplo diferencia clases clase abstractas abstracta c++ c++11 abstract-class language-lawyer

c++ - poo - Creación de instancias de una clase abstracta a través de la lista de inicializadores



ejercicios de clases abstractas e interfaces en java (1)

Esto parece un error conocido de g ++ número 70939 :

Creación de objeto de clase abstracta permitido en todas las versiones de g ++

g ++ compila el programa C ++ mal formado con éxito

class A { public: A() { printf("A()/n"); } virtual void b() const = 0; }; int main() { const A& a{}; a.b(); return 0; }

Tu código hace lo mismo que esta línea.

const A& a{}

como parte de la invocación g({}) .

Esta pregunta ya tiene una respuesta aquí:

Me gustaría entender por qué el compilador permite compilar el siguiente código

#include <iostream> struct A { A() { std::cout << "A::A/n"; } virtual void f() const = 0; }; void g(const A& a) { a.f(); } int main() { g({}); }

Incluso emite A::A cuando se ejecuta.

Si sustituyo g({}) por g(A()) obviamente no se compila. Se queja de que A es abstracto y no puede ser instanciado. Tanto Clang como GCC compilan esta multa sin ninguna advertencia. Cuando se ejecutan ambas versiones, se imprime pure virtual method called y termina.