Aunque desconcertante con algunos hechos sobre el diseño de clases, específicamente si las funciones deberían ser miembros o no, busqué en C++ efectivo y encontré el Ítem 23, es decir, prefiero funciones no miembro no miembro a funciones miembro. Leerlo de primera mano con el ejemplo del navegador web tiene cierto sentido, sin embargo, las funciones de conveniencia (llamadas funciones no miembro como esta en el libro) en ese ejemplo cambian el estado de la clase, ¿verdad?C++ efectivo Artículo 23 Prefiere funciones no miembro no miembro a funciones miembro
Así que, primera pregunta, ¿no deberían ser miembros que?
Leyendo un poco más, considera que las funciones STL y, de hecho, algunas funciones que no están implementadas por algunas clases se implementan en stl. Siguiendo las ideas del libro, evolucionan hacia algunas funciones de conveniencia que se empaquetan en algunos espacios de nombres razonables, como
std::sort
,std::copy
dealgorithm
. Por ejemplo, la clasevector
no tiene una funciónsort
y una usa la función stlsort
, por lo que no es miembro de la clase vectorial. Pero también se podría estirar el mismo razonamiento a otras funciones en la clase vector comoassign
, por lo que tampoco podría implementarse como miembro sino como una función de conveniencia. Sin embargo, eso también cambia el estado interno del objeto, como el género en el que operaba. Entonces, ¿cuál es la razón de ser de este tema sutil pero importante (supongo)?
Si tiene acceso al libro, ¿puede aclararme un poco más estos puntos?
Estoy sorprendido de que nadie ha escrito el [enlace a la muy relevante Dr. Dobbs artículo] (http: // drdobbs.com/cpp/184401197) por Scott Meyer todavía! – Xeo