es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede parecer que la variable miembro privada m_val se está accediendo directamente usando objPtr->m_val, pero en realidad se está accediendo dentro de la misma clase myClass, específicamente dentro del método estático create.

    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 de myClass y puede acceder a la variable miembro privada m_val de cualquier objeto de myClass.

    Sin embargo, si intentas acceder a objPtr->m_val fuera de myClass, como en la función main, resultaría en un error de tiempo de compilación porque las variables miembro privadas no pueden ser accedidas fuera de la clase.

Comments are closed.