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? 🙂
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 privadaerror
. Luego, dentro de la funcióncallError
, puedes llamar a la función privadaerror
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)
}
int main()
{
A obj;
obj.callError(); //Salida: ¡Error!
return 0;
}
“`
En este ejemplo, definimos la función privada
error
y la función públicacallError
. Dentro de la funcióncallError
, creamos un puntero a miembroptr
de tipovoid (A::*)(void)
y lo asignamos a la dirección de la funciónerror
utilizando&A::error
. Luego, llamamos a la funciónerror
utilizando el puntero a miembro(this->*ptr)();
.