Es una creencia común que la biblioteca estándar de C++ generalmente no se pretende extender mediante el uso de herencia. Ciertamente, yo (y otros) hemos criticado a personas que sugieren derivar de clases como std::vector
. Sin embargo, esta pregunta: c++ exceptions, can what() be NULL? me hizo darme cuenta de que hay al menos una parte de la Biblioteca estándar que está destinada a ser tan extendida: std::exception
.¿Extender la biblioteca estándar de C++ por herencia?
lo tanto, mi pregunta tiene dos partes:
¿Hay otras clases de biblioteca estándar que se pretende que se derivan de?
Si uno deriva de una clase de biblioteca estándar como
std::exception
, ¿está vinculado por la interfaz descrita en el estándar ISO? Por ejemplo, ¿un programa que utiliza una clase de excepción que es la función de miembrowhat()
no devolvió un NTBS (digamos que devolvió un puntero nulo) de conformidad estándar?
Mencionaste que no heredabas de clases que no tienen miembros virtuales, pero también mencionaste clases de políticas. Entonces (por ejemplo) ¿qué hay de malo en heredar de un asignador (privadamente)? –
. Añadiría que algunas cosas están destinadas a tener un pequeño grado ree de extensión a través de la herencia, como 'std :: stack' y' std :: queue' porque tienen ** protected **, ya que la única razón para proteger las cosas es permitir que una clase hija lea los datos. Obviamente, deberías tener mucho cuidado con lo que haces con esto. –