Un factor es si incluso ponerlos en una clase, o simplemente ponerlos como nomembers en un espacio de nombres (en Java, tendría que utilizar una clase, pero C++ ofrece espacios de nombres).
Si lo hace un miembro de la clase, la decisión más importante que debe tomar sobre cada función es si requeriría o debería afectar a cualquier estado que no se reciba o pase a través de sus parámetros y valor de retorno. Si no es así, entonces debe hacerse static
, ya que no usará el argumento oculto "this".
Un argumento para utilizar una clase en lugar de un espacio de nombres es si su clase de utilidad puede necesitar invocar métodos adicionales para su implementación (por ejemplo, en caso de recurrencia, cálculos complejos, etc.). A continuación, puede hacer que su método sea static public
y todo lo que se implemente sobre static private
. Han pasado muchos años desde que utilicé C++, pero no creo que pueda "ocultar" las funciones que no son miembro en un espacio de nombres (alguien me corrige si estoy equivocado).
En términos de diseño de la interfaz de función, tenga en cuenta la cantidad de argumentos. Si hay demasiados argumentos entrantes (especialmente si son de tipos similares y algunos están relacionados), es posible que desee considerar el uso de tipos adicionales en lugar de pasar múltiples argumentos. Por ejemplo, en lugar de calculateVolume(int x, int y, int z)
, es posible que desee hacer algo como calculateVolume(Point3D)
. Del mismo modo, en su caso, use una clase RGB. Puede parecer una tontería, pero puede ahorrar algunos errores molestos (por ejemplo, si tiene funciones que toman entradas y RGB), y tiempo (si tiene que pasar los valores a otras funciones). Puede crear un método de fábrica estático para facilitar la creación de estos tipos al pasar argumentos. Por ejemplo: doSomethingWithColor(RGB.create(20,30,40))
CopyString() parece sospechoso: ¿qué hará? –
@Neil: Copiando una cadena al montón, para que no se salga del alcance ... –
No lo haga, bajo ninguna circunstancia, es una fuga de memoria casi garantizada. Use std :: string. –