13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

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 />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!