una resueltos que programacion orientada objetos objeto miembros metodos ejercicios ejemplos clases clase atributos c++ optimization compiler-construction inline-functions

c++ - resueltos - que es un objeto en programacion



¿Por qué los métodos C++ a veces se definen dentro de las clases? (3)

A menudo no hay otra razón más que simplemente es más fácil y ahorra tiempo. También guarda un poco de desorden en el archivo de implementación, mientras ocupa el mismo número de líneas en el archivo de encabezado. Y ser menos legible es bastante difícil si se limita a cosas como getters y setters.

Con frecuencia me encuentro con clases grandes que no son de plantilla en C ++ donde los métodos simples se definen directamente en el cuerpo de la clase en el archivo de encabezado en lugar de por separado en el archivo de implementación. Por ejemplo:

class Foo { int getBar() const { return bar; } ... };

¿Por qué hacer esto? Parece que hay desventajas. La implementación no está tan oculta como debería ser, el código es menos legible y también habría una mayor carga en el compilador si el archivo de encabezado de la clase se incluye en muchos lugares diferentes.

Supongo que la gente tiene la intención de incluir estas funciones en otros módulos, lo que podría mejorar significativamente el rendimiento. Sin embargo, he escuchado que los compiladores más nuevos pueden hacer inline (y otras optimizaciones entre procesos) en tiempo de enlace entre los módulos. ¿Qué tan amplio es el soporte para este tipo de optimización de tiempo de enlace, y realmente hace innecesario este tipo de definiciones? ¿Hay alguna otra buena razón para estas definiciones?


El estándar C ++ dice que los métodos definidos dentro de la definición de la clase están en inline por defecto. Esto se traduce en ganancias de rendimiento obvias para funciones simples como getters y setters. La optimización de módulos cruzados en tiempo de enlace es más difícil, aunque algunos compiladores pueden hacerlo.


Usted respondió su propia pregunta, de hecho son métodos en línea.

Las razones para usarlos son el rendimiento.