Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 173 — #211<br />
✐<br />
5.3. Amigos (fri<strong>en</strong>ds)<br />
struct B {<br />
private:<br />
char j;<br />
float f;<br />
public:<br />
int i;<br />
void func();<br />
};<br />
void B::func() {<br />
i = 0;<br />
j = ’0’;<br />
f = 0.0;<br />
};<br />
int main() {<br />
B b;<br />
b.i = 1; // OK, public<br />
//! b.j = ’1’; // Illegal, private<br />
//! b.f = 1.0; // Illegal, private<br />
} ///:~<br />
Aunque func() puede acceder a cualquier miembro de B (pues func() <strong>en</strong> un<br />
miembro de B, garantizando así automáticam<strong>en</strong>te el acceso), una función global ordinaria<br />
como main() no puede. Por supuesto tampoco miembros de otras estructuras.<br />
Solo las funciones que pert<strong>en</strong>ezcan a la declaración de la estructura (el «contrato»)<br />
t<strong>en</strong>drán acceso a miembros private.<br />
No hay un ord<strong>en</strong> fijo para los especificadores de acceso, y pued<strong>en</strong> aparecer más<br />
de una vez. Afectan a todos los miembros declarados después de ellos hasta el sigui<strong>en</strong>te<br />
especificador.<br />
5.2.1. protected<br />
Es el último que nos queda por ver, protected actúa como private, con una<br />
excepción de la que hablaremos más tarde: estructuras heredadas (que no pued<strong>en</strong><br />
acceder a lo miembros privados) si ti<strong>en</strong><strong>en</strong> acceso a los miembros protected. Todo<br />
esto se verá más claram<strong>en</strong>te <strong>en</strong> el capítulo 14 cuando veamos la her<strong>en</strong>cia. Con lo que<br />
sabe hasta ahora puede considerar protected igual que private.<br />
5.3. Amigos (fri<strong>en</strong>ds)<br />
¿Que pasa si explícitam<strong>en</strong>te se quiere dar acceso a una función que no es miembro<br />
de la estructura Esto se consigue declarando la función como fri<strong>en</strong>d d<strong>en</strong>tro<br />
de la declaración de la estructura. Es importante que la declaración de una función<br />
fri<strong>en</strong>d se haga d<strong>en</strong>tro de la declaración de la estructura pues usted (y el compilador)<br />
necesita ver la declaración de la estructura y todas las reglas sobre el tamaño y<br />
comportami<strong>en</strong>to de ese tipo de dato. Y una regla muy importante <strong>en</strong> toda relación<br />
es, «¿Quién puede acceder a mi parte privada»<br />
La clase controla que código ti<strong>en</strong>e acceso a sus miembros. No hay ninguna manera<br />
mágica de «colarse» desde el exterior si no eres fri<strong>en</strong>d; no puedes declarar<br />
173<br />
✐<br />
✐<br />
✐<br />
✐