¿Qué es herencia de constructor?

En C ++ 11, ¿qué se entiende por heredar el constructor? Si es lo que creo que es (el constructor de la clase Base se incluye en el scope de la clase derivada), ¿cuáles son sus implicaciones en mi código? ¿Cuáles son las aplicaciones de tal característica?

Heredar constructores significa exactamente eso. Una clase derivada puede heredar implícitamente constructores de su (s) clase (s) base.

La syntax es la siguiente:

struct B { B(int); // normal constructor 1 B(string); // normal constructor 2 }; struct D : B { using B::B; // inherit constructors from B }; 

Entonces ahora D tiene los siguientes constructores definidos implícitamente:

 D::D(int); // inherited D::D(string); // inherited 

Los miembros Ds son construidos por defecto por estos constructores heredados.

Es como si los constructores se definieran de la siguiente manera:

 D::D(int x) : B(x) {} D::D(string s) : B(s) {} 

La característica no es nada especial. Es solo una abreviatura para guardar el código repetitivo de mecanografía.

Aquí están los detalles sangrientos:

12.9 heredando constructores

1) Una statement de uso que nombra a un constructor declara implícitamente un conjunto de constructores heredados. El conjunto candidato de constructores heredados de la clase X nombrada en la statement de uso consiste en constructores reales y constructores nocionales que resultan de la transformación de los parámetros predeterminados de la siguiente manera:

  • todos los constructores sin plantilla de X, y
  • para cada constructor no plantilla de X que tiene al menos un parámetro con un argumento predeterminado, el conjunto de constructores que resulta de omitir cualquier especificación de parámetro elipsis y omitir sucesivamente los parámetros con un argumento predeterminado desde el final del parámetro-lista-tipo, y
  • todas las plantillas de constructor de X, y
  • para cada plantilla de constructor de X que tiene al menos un parámetro con un argumento predeterminado, el conjunto de plantillas de constructor que resulta de omitir cualquier especificación de parámetro elipse y omitir sucesivamente los parámetros con un argumento predeterminado desde el final del parámetro-type-list