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.

Cómo llamar a una función miembro privada utilizando un puntero.

Pregunta de principiante:

Tengo esta clase:

class A
{
private:
    void error(void);
public:
    void callError(void);
};

Y me gustaría llamar a la función error desde callError usando un puntero.

Puedo lograr llamar a una función pública desde la función main usando un puntero.

int main(void)
{
    void (A::*abc)(void) = &A::callError;
    A test;

    (test.*abc)();
    return (0);
}

Sin embargo, no encuentro una forma de llamar a la función error desde callError usando un puntero. ¿Algún consejo? 🙂

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes lograr esto creando un puntero a miembro de tipo void (A::*)(void) y asignándole la dirección de la función privada error. Luego, dentro de la función callError, puedes llamar a la función privada error utilizando el puntero a miembro. Aquí tienes un ejemplo:

    “`c++
    class A
    {
    private:
    void error(void);
    public:
    void callError(void);
    };

    void A::error(void)
    {
    std::cout << “¡Error!\n”;
    }

    void A::callError(void)
    {
    void (A::ptr)(void) = &A::error;//puntero a miembro de tipo void (A::)(void)

    //llamar a la función privada error utilizando el puntero a miembro
    (this->*ptr)(); 
    

    }

    int main()
    {
    A obj;
    obj.callError(); //Salida: ¡Error!
    return 0;
    }
    “`

    En este ejemplo, definimos la función privada error y la función pública callError. Dentro de la función callError, creamos un puntero a miembro ptr de tipo void (A::*)(void) y lo asignamos a la dirección de la función error utilizando &A::error. Luego, llamamos a la función error utilizando el puntero a miembro (this->*ptr)();.

Comments are closed.