variable objetos funcion estatica ejemplos c++

c++ - objetos - ¿Cómo implementar funciones de miembro de clase estática en el archivo*.cpp?



variable estatica (8)

¿Es posible implementar funciones de miembro de clase static en el archivo * .cpp en lugar de hacerlo en el archivo de encabezado?

¿Están todas las funciones static siempre en inline ?


@crobar, tienes razón en que hay una escasez de ejemplos de varios archivos, así que decidí compartir lo siguiente con la esperanza de que ayude a otros:

:::::::::::::: main.cpp :::::::::::::: #include <iostream> #include "UseSomething.h" #include "Something.h" int main() { UseSomething y; std::cout << y.getValue() << ''/n''; } :::::::::::::: Something.h :::::::::::::: #ifndef SOMETHING_H_ #define SOMETHING_H_ class Something { private: static int s_value; public: static int getValue() { return s_value; } // static member function }; #endif :::::::::::::: Something.cpp :::::::::::::: #include "Something.h" int Something::s_value = 1; // initializer :::::::::::::: UseSomething.h :::::::::::::: #ifndef USESOMETHING_H_ #define USESOMETHING_H_ class UseSomething { public: int getValue(); }; #endif :::::::::::::: UseSomething.cpp :::::::::::::: #include "UseSomething.h" #include "Something.h" int UseSomething::getValue() { return(Something::getValue()); }


En su archivo de encabezado, diga foo.h

class Foo{ public: static void someFunction(params..); // other stuff }

En su archivo de implementación, diga foo.cpp

#include "foo.h" void Foo::someFunction(params..){ // Implementation of someFunction }

Muy importante

Solo asegúrese de no utilizar la palabra clave estática en la firma de su método cuando implemente la función estática en su archivo de implementación.

Buena suerte


Es.

test.hpp:

class A { public: static int a(int i); };

test.cpp:

#include <iostream> #include "test.hpp" int A::a(int i) { return i + 2; } using namespace std; int main() { cout << A::a(4) << endl; }

No siempre están en línea, no, pero el compilador puede hacerlos.


La directiva #include literalmente significa "copiar todos los datos en ese archivo a este lugar". Entonces cuando incluye el archivo de encabezado, está textualmente dentro del archivo de código, y todo estará allí, dará o tendrá el efecto de otras directivas o macro reemplazos, cuando el archivo de código (ahora llamado unidad de compilación o traducción ) es transferido desde el módulo de preprocesador al módulo de compilación.

Lo que significa que la declaración y la definición de su función miembro estática estaban realmente en el mismo archivo todo el tiempo ...


Prueba esto:

header.hxx:

class CFoo { public: static bool IsThisThingOn(); };

class.cxx:

#include "header.hxx" bool CFoo::IsThisThingOn() // note: no static keyword here { return true; }




helper.hxx

class helper { public: static void fn1 () { /* defined in header itself */ } /* fn2 defined in src file helper.cxx */ static void fn2(); };

helper.cxx

#include "helper.hxx" void helper::fn2() { /* fn2 defined in helper.cxx */ /* do something */ }

A.cxx

#include "helper.hxx" A::foo() { helper::fn1(); helper::fn2(); }

Para saber más sobre cómo maneja c ++ las funciones estáticas, visite: ¿Las funciones de los miembros estáticos en c ++ se copian en varias unidades de traducción?