Acceder a la variable privada en C++
- Acceder a la variable privada en C++
- Acceda a la variable privada en C++ usando funciones miembro
-
Acceda a variables privadas en C++ usando funciones de
friend
- Acceda a la variable privada en C++ usando punteros
- Conclusión
Este artículo analiza las variables privadas de C++ y cómo acceder a ellas en C++.
Acceder a la variable privada en C++
La encapsulación protege los datos confidenciales y esenciales de usuarios no autorizados. La palabra clave privado
se utiliza para lograr este fenómeno.
Junto con la encapsulación, el concepto de ocultación de datos también se implementa en C++. La variable declarada con la palabra clave privada
en C++ indica que solo las funciones miembro de su clase pueden acceder a ella.
Cualquier objeto o función no puede acceder directamente a él.
#include <iostream>
using namespace std;
class shape {
private:
double r;
public:
void area(double rr) {
r = rr;
double ar = 3.14 * r * r;
cout << "Radius is: " << r << endl;
cout << "Area is: " << ar;
}
};
int main() {
shape obj;
obj.area(1.5);
return 0;
}
Producción :
Radius is: 1.5
Area is: 7.065
Aparte de una función friend
o función miembro de la clase, ninguna entidad puede acceder a los datos privados miembro de la clase. Aquí, la variable r
es accedida por la función miembro de la clase area()
.
La función area()
calcula el área del círculo accediendo al miembro de datos privados de la clase. Y el objeto de la clase se crea en la función principal de la clase.
A través de este objeto se accede a la función miembro de la clase y se calcula el área del círculo.
La función friend
por sí sola no es la forma de acceder a los datos privados de los miembros. Además de eso, también se accede a las variables privadas fuera de una clase usando punteros.
Este método de usar punteros para acceder a miembros de datos privados es una laguna en C++. Siga leyendo para obtener más información al respecto.
Acceda a la variable privada en C++ usando funciones miembro
No se puede acceder a una variable o función miembro privada en C++ ni verla fuera de la clase. El concepto principal de C++ es su característica única de seguridad de datos.
Un miembro de datos privados solo puede ser accedido por la clase en la que se crea y la función friend
de su clase.
Concéntrese en el siguiente ejemplo para aprender cómo las funciones miembro de la clase acceden a los miembros de datos.
#include <iostream>
using namespace std;
class Emp {
private:
int sal;
public:
void setSal(int s) { sal = s; }
int getSal() { return sal; }
};
int main() {
Emp myObj;
myObj.setSal(50000);
cout << myObj.getSal();
return 0;
}
Producción :
50000
En el programa anterior, la clase emp
tiene miembros privados y públicos. sal
es una variable privada a la que pueden acceder dos funciones miembro de clase: setSal()
y getSal()
.
setSal()
está inicializando el valor del miembro de datos privados sal
, y getSal()
devuelve el valor del miembro de datos privados sal
. Finalmente, en el método principal, se crea el objeto de la clase.
El objeto myObj
accede a la función miembro de la clase, setSal()
, para pasar el valor al miembro de datos privados sal
. Por último, el objeto de clase accede a getSal()
para devolver el miembro de datos sal
.
Por defecto, todos los miembros de una clase son privados; por ejemplo, en la siguiente clase, w
es un miembro privado. Por lo tanto, se considerará un miembro de datos privados hasta que lo etiquetes como público o protegido.
class B {
double w;
public:
double len;
void setW(double wid);
double get(void);
};
En tiempo real, los datos se definen en el área privada y las funciones de los miembros en el área pública para llamarlos desde fuera de la clase, como se muestra en el siguiente programa.
#include <iostream>
using namespace std;
class B {
public:
double len;
void setW(double wid);
double getW(void);
private:
double w;
};
double B::getW(void) { return w; }
void B::setW(double wid) { w = wid; }
int main() {
B box;
box.len = 10.0;
cout << "Length: " << box.len << endl;
box.setW(10.0);
cout << "Width: " << box.getW() << endl;
return 0;
}
En el programa anterior, la clase B
tiene miembros privados y públicos. Aquí, w
es una variable privada a la que puede acceder la función miembro de dos clases: setW()
y getW()
.
setW()
inicializa el valor del miembro de datos privados w
, y getW()
devuelve el valor del miembro de datos privados w
. El cuadro de objeto accede a la función miembro de la clase.
Se puede acceder a la variable pública len
a través del cuadro de objeto y se inicializa con un valor. setW()
asigna el valor dado al miembro de datos privados w
.
Finalmente, el cuadro de objeto de clase accede a getW()
para devolver el miembro de datos w
.
Producción :
Length: 10
Width: 10
Acceda a variables privadas en C++ usando funciones de friend
Una función de friend
está en la parte privada o pública de la clase. Se puede llamar una función miembro normal sin usar el objeto.
El objeto de clase no lo llama porque no está dentro del alcance de la clase. Además, no puede acceder directamente a los miembros de datos privados y protegidos de la clase.
La función friend
usa el objeto de la clase y accede a los miembros usando el operador punto. Puede ser una función global o un miembro de otra clase.
#include <iostream>
using namespace std;
class Dist {
private:
int m;
friend int add(Dist);
public:
Dist() : m(0) {}
};
int add(Dist d) {
d.m += 5;
return d.m;
}
int main() {
Dist D;
cout << "Distance: " << add(D);
return 0;
}
Producción :
Distance = 5
En el programa anterior, podemos ver una clase Dist
con miembros privados m
. Tenemos un constructor público que está inicializando los valores de m
.
Luego, hay una función de friend
add()
, que calcula la distancia usando m
. La función add()
es una función friend
que no está dentro del alcance de la clase.
En el método principal se crea un objeto de la clase y se pasa la función add()
. La función add()
calcula la distancia y muestra el resultado.
Clase friend
en C++
Una clase friend
es como funciones amigas
que se pueden crear. La clase friend
puede acceder a los miembros secretos y protegidos de la clase de la que es amiga.
Similar a las funciones de friend
, hay una clase de friend
. Puede acceder a miembros de clases privados y protegidos de los que es friend
.
Sintaxis:
class X {
Data members;
Member Functions;
friend class Y;
};
class B {
……..
};
Como se muestra en la sintaxis, la clase X
es un friend
de la clase Y
. Esto significa que la clase Y
puede acceder a los miembros privados y protegidos de la clase X
.
Pero esta amistad no es mutua, y la clase X
no puede acceder a miembros privados y protegidos de la clase Y
. Debemos designar a la clase X
como friend
de la clase Y
.
Además, la amistad no se hereda, por lo que la clase Y
no será un friend
de las clases secundarias de la clase X
.
Ejemplo de clase friend
en C++
#include <iostream>
#include <string>
using namespace std;
class Ar {
int len, br, arr;
public:
Ar(int l, int b) {
len = l;
br = b;
};
void computeArea() { arr = len * br; }
friend class prClass;
};
class prClass {
public:
void prAr(Ar &a) { cout << "Area = " << a.arr; }
};
int main() {
Ar a(20, 10);
a.computeArea();
prClass p;
p.prAr(a);
return 0;
}
Producción :
Area = 200
En el programa anterior, hay dos clases. La clase Ar
calcula el área utilizando las variables len
y br
.
Esta clase tiene tres miembros de datos privados: arr
, len
y br
. La otra clase creada es prClass
, que imprime el área final calculada por la función miembro computeArea
de la clase Ar
.
Debido a que todos los miembros de datos son privados, necesitamos hacer que prClass
sea un friend
de la clase Ar
para imprimir el resultado. El objeto de clase Ar
se crea dentro de la función principal.
Se realiza el cálculo del área y se pasa el objeto de la clase Ar
a la función prClass
. Esta función se llama prAr
, que muestra el área.
Contras de usar una función friend
para acceder a variables privadas en C++
La característica más importante de C++ es la encapsulación, es decir, una agrupación de datos y funciones. Los miembros de datos y las funciones miembro trabajan en los datos juntos para que ninguna función o clase externa pueda acceder a los datos.
La función de encapsulación se ve comprometida debido a que las funciones o clases de friend
pueden acceder a los miembros privados de otra clase. La seguridad de los datos está en peligro.
Acceda a la variable privada en C++ usando punteros
Los punteros acceden a los datos sin una función de friend
o miembro de clase.
#include <bits/stdc++.h>
using namespace std;
class Hello {
private:
int c;
int d;
};
int main() {
Hello a;
int* q = (int*)&a;
*q = 4;
q++;
*q = 5;
q--;
cout << endl << "c = " << *q;
q++;
cout << endl << "d = " << *q;
return 0;
}
Producción :
c = 4
d = 5
En el programa anterior, a
es un objeto de la clase Hello
. La dirección del objeto de clase a
se asigna al puntero entero q
mediante encasillamiento.
El puntero q
luego apunta al miembro privado c
. El valor entero se asigna a *q
, que es c
.
Luego se aumenta la dirección del objeto a
y accediendo a la ubicación de memoria se le asigna el valor 5 a d
. La declaración q--
establece la ubicación de memoria de c
.
Usando la instrucción cout
, se muestra c
.
Conclusión
En este artículo, hemos discutido el acceso a una variable privada en C++. Aprendimos sobre los diversos métodos para acceder a miembros privados en C++.
Además, con muchos ejemplos, discutimos el concepto de funciones y punteros friend
en C++. Una cosa importante a tener en cuenta es que los objetos no se pueden crear en una clase cuyas funciones miembro también son privadas.
Teniendo esto en cuenta, esperamos que haya disfrutado leyendo este artículo. Estén atentos para más artículos informativos.