Teoretycznie czy praktycznie?
Teoretycznie to nie i są ku temu powody -> skoro twórca biblioteki oznaczył to jako prywatne to znaczy że uważa że nikt nie powinien przy tym majstrować. Może na przykład inne elementy biblioteki opierają się o pewne niepisane zasady co do wartości takich prywatnych pól i ich zmiana będzie powodować trudne do wykrycia błędy? To jest bardzo ryzykowna sprawa i raczej odradzam.
Praktycznie w C++ niewiele jest rzeczy których zrobić nie można. Na dobrą sprawę obiekt danej klasy to są po prostu pewne bajty interpretowane w odpowiedni sposób. Jeśli klasa nie ma metod wirtualnych (czyli tym samym tablicy virtual methods pointers) i nie ma pól bitowych (więc potencjalnych paddingów) to można sobie łatwo policzyć które bajty z tego obiektu odpowiadają tej twojej zmiennej. Bo pola są zwykle ustawiane po kolei (chyba że masz gdzieś wirtualnej dziedziczenie). Więc nic nie stoi na przeszkodzie żeby zrobic wskaźnik, pokazać nim na obiekt klasy, przesunąć wskaźnik o X bajtów na pozycje gdzie zaczyna sie twoja zmienna, zrzutować na inta, przypisać nową wartość i voila.
edit1: tak jak napisał @Endrju to jest generalnie UB niemniej jest spora szansa że zadziała ;]
edit2: Przykład jak to działa
#include <iostream>
using namespace std;
class A{
public:
A(int xx, int yy, int zz):x(xx),y(yy),z(zz){}
int getX(){return x;}
int getY(){return y;}
int getZ(){return z;}
private:
int x;
int y;
int z;
};
int main(){
A obiekt = A(1,2,3);
cout<<obiekt.getX()<<" "<<obiekt.getY()<<" "<<obiekt.getZ()<<endl;
char* wskaznikByte = (char*) &obiekt;
int* wskaznikInt = (int*) wskaznikByte;
*wskaznikInt = 4;
cout<<obiekt.getX()<<" "<<obiekt.getY()<<" "<<obiekt.getZ()<<endl;
wskaznikInt = (int*)(wskaznikByte+sizeof(int));
*wskaznikInt = 5;
cout<<obiekt.getX()<<" "<<obiekt.getY()<<" "<<obiekt.getZ()<<endl;
wskaznikInt = (int*)(wskaznikByte+2*sizeof(int));
*wskaznikInt = 6;
cout<<obiekt.getX()<<" "<<obiekt.getY()<<" "<<obiekt.getZ()<<endl;
return 0;
}