sencillos resolucion que punteros poo polimorfismo operador objeto metodos ejemplos ejemplo codigo clases ambito c++ class methods

c++ - resolucion - miembros de la función en línea dentro de una clase



punteros c++ (3)

Sé que declarar una función (función normal no un método dentro de una clase) como en línea es una buena práctica cuando la definición de la función es pequeña para el rendimiento y ahorra tiempo para la compilación. Pero, ¿qué hay de los métodos en línea dentro de una clase? ¿No entiendo el concepto de métodos en línea dentro de una clase? Cómo definirlos y cómo funcionan.


pero ¿qué hay de los métodos en línea dentro de una clase?

Ambas sintaxis para las funciones de incorporación (que usan en inline explícita y definen la función de miembro dentro de la definición de clase) proporcionan solo una pista acerca de la alineación para el compilador. Desde el punto de vista del rendimiento , son iguales.

En caso de definir una función miembro dentro de una declaración de clase, la legibilidad de esta última debería ser su principal preocupación: realmente lastima la interfaz de la clase litera con múltiples líneas de detalles de implementación. Así que evite hacerlo si su función de miembro es más de una afirmación: return stuff o reenvío simple debería ser correcto, pero por lo general no más que eso.

class MyClass { public: int f() const { return m_i; } int g() const; private: int m_i; }; inline int MyClass::g() const { return m_i; } // both member-functions behave equally (except for naming)


Especificar una función / procedimiento como en inline dentro de una clase es insinuarle al compilador que, en lugar de crear código para llamar a la función y pasar los parámetros, el contenido de la función debe colocarse en el punto de llamada.

Puede mejorar el rendimiento del binario compilado cuando se vuelve más eficiente ejecutar la función sin tener que pasar parámetros. También puede ser perjudicial para el rendimiento, ya que repetir el código que debería haber estado en la función en cada ubicación de la llamada puede causar que disminuya la probabilidad de que el código se encuentre en una memoria caché más rápida.


Hay dos opciones para ofrecer al compilador para hacer una función de clase en línea:

(1) Si define una función en la declaración de la clase (en un archivo de encabezado)

class Human { public: Human(const char* name); Human(); //is implicit inline void lookAt(const char* name) const { std::cout << "I''m looking at " << name << std::endl; } private: char _name[30]; };

(2) utilice la palabra clave en línea explícita en la definición de la función (En un archivo de encabezado)

//is explicit inline inline void lookAt(const char* name) const { std::cout << "I''m looking at " << name << std::endl; }