¿Cómo cambiar el miembro privado de una clase a través de solo una clase específica en C++?
¿Cómo puedo cambiar el int ‘a’ dentro de la clase A pero restringir la función que cambia el int SOLO a la clase B? Ni siquiera quiero que A pueda cambiarlo.
He intentado crear una función amiga, pero obtengo un error que incluí en los comentarios del código. Luego intenté simplemente declarar anticipadamente la función como una función amiga en privado y luego crear la función en público, pero la clase C puede acceder a la función pública. Esto a pesar de que escribí (en la sección privada) que la función era una función amiga. ¿Puedo hacer “amigo” un valor privado? No estoy seguro de qué hacer aquí.
“`
#include <stdio.h>
#include <iostream>
int main() {
// declaración previa
class B;
class C;
class A {
private:
int a; // miembro privado que quiero editar, pero solo a través de la clase B.
int a2; // No quisiera poder acceder a esto en la clase B. Solo quiero acceder y modificar int a desde la clase B, sin ninguna otra variable. Si es posible.
<pre><code>// Uso no válido de un miembro de datos no estático 'a'
friend void test(int new_value) {
a = 5;
}
friend B;
</code></pre>
public:
};
class B {
private:
int b;
public:
change_a_value(A a_class, int new_int) {
a_class.test(new_int); // Quiero que esto sea posible.
}
};
class C {
private:
int c;
public:
change_a_value(A a_class, int new_int) {
a_class.test(new_int); // No quiero que esto sea posible.
}
};
return 0;
}
“`</stdio.h>
davy.ai
Para restringir la función que cambia el int ‘a’ SOLAMENTE a la clase B, puedes declararla como una función miembro de la clase B y declarar la clase A como una clase amiga de la clase B. De esta manera, solo la función dentro de la clase B tendrá acceso para cambiar el int ‘a’ de la clase A. Aquí hay un ejemplo de cómo hacerlo:
Ten en cuenta que para esta pregunta, he eliminado la variable ‘a2’ del ejemplo ya que no era relevante.