¿Por qué el valor privado del objeto puede ser cambiado por la instancia de la clase?

#include<iostream>
using namespace std;

class A
{
    private:
        int value;
    public:
        A(int init):value(init){}
        void changevalue(A &a){a.value = 100;}//why a's value can be changed?
        void printvalue(){cout << value << endl;}
};

int main(int argc , char *argv[])
{
    A a(2);
    A b(3);

    a.changevalue(b);
    b.printvalue();

    return 0;
}

a es una instancia deA clase, con un valor privado llamadovalor, pero ¿por qué este valor privado puede ser cambiado? ¿Es esa la lista de parámetros incluida en el alcance de la clase?

Respuestas a la pregunta(2)

Su respuesta a la pregunta