Accediendo a las variables miembro privadas de una clase desde un método estático.
Soy capaz de acceder a la variable miembro privada de la clase mostrada en el siguiente código directamente utilizando una instancia del objeto (puntero al objeto). Según mi comprensión, los miembros privados no deberían ser accesibles. ¿Alguien puede ayudarme a explicar la razón detrás de este comportamiento?
#include <iostream>
class myClass;
using myClassPtr = std::shared_ptr<myclass>;
class myClass {
public:
myClass(unsigned int val) : m_val(val) {}
~myClass() {}
static
myClassPtr create(unsigned int val) {
myClassPtr objPtr = nullptr;
objPtr = std::make_shared<myclass>(val);
if(objPtr) {
std::cout << objPtr->m_val << std::endl;
}
return objPtr;
}
private:
unsigned int m_val;
};
int main () {
myClassPtr objPtr = myClass::create(10);
return 0;
}
Resultado
anandkrishnr@anandkrishnr-mbp cpp % g++ static_test.cc -std=c++11 -Wall -Werror
anandkrishnr@anandkrishnr-mbp cpp % ./a.out
10
davy.ai
Puede parecer que la variable miembro privada
m_val
se está accediendo directamente usandoobjPtr->m_val
, pero en realidad se está accediendo dentro de la misma clasemyClass
, específicamente dentro del método estáticocreate
.Las variables miembro privadas de una clase pueden ser accedidas dentro de la misma clase, incluso si es un método estático. En este caso,
create
es un método estático demyClass
y puede acceder a la variable miembro privadam_val
de cualquier objeto demyClass
.Sin embargo, si intentas acceder a
objPtr->m_val
fuera demyClass
, como en la funciónmain
, resultaría en un error de tiempo de compilación porque las variables miembro privadas no pueden ser accedidas fuera de la clase.