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 179 — #217<br />
✐<br />
5.5. La clase<br />
La <strong>en</strong>capsulación y el control de acceso, juntos, crean algo más que una estructura<br />
de C. Estamos ahora <strong>en</strong> el mundo de la programación ori<strong>en</strong>tada a objetos, donde<br />
una estructura describe una clase de objetos como describiría una clase de peces o<br />
pájaros: Cualquier objeto que pert<strong>en</strong>ezca a esa clase compartirá esas características y<br />
comportami<strong>en</strong>to. En esto se ha convertido la declaración de una estructura, <strong>en</strong> una<br />
descripción de la forma <strong>en</strong> la que los objetos de este tipo serán y actuarán.<br />
En el l<strong>en</strong>guaje OOP original, Simula-67, la palabra clave class fue usada para<br />
describir un nuevo tipo de dato. Apar<strong>en</strong>tem<strong>en</strong>te esto inspiro a Stroustrup a elegir<br />
esa misma palabra <strong>en</strong> <strong>C++</strong>, para <strong>en</strong>fatizar que este era el punto clave de todo el<br />
l<strong>en</strong>guaje: la creación de nuevos tipos de dato que son más que solo estructuras de C<br />
con funciones. Esto parece sufici<strong>en</strong>te justificación para una nueva palabra clave.<br />
De todas formas, el uso de class <strong>en</strong> <strong>C++</strong> es casi innecesario. Es idéntico a s-<br />
truct <strong>en</strong> todos los aspectos excepto <strong>en</strong> uno: class pone por defecto private,<br />
mi<strong>en</strong>tras que struct lo hace a public. Estas son dos formas de decir lo mismo:<br />
//: C05:Class.cpp<br />
// Similarity of struct and class<br />
struct A {<br />
private:<br />
int i, j, k;<br />
public:<br />
int f();<br />
void g();<br />
};<br />
int A::f() {<br />
return i + j + k;<br />
}<br />
void A::g() {<br />
i = j = k = 0;<br />
}<br />
// Id<strong>en</strong>tical results are produced with:<br />
class B {<br />
int i, j, k;<br />
public:<br />
int f();<br />
void g();<br />
};<br />
int B::f() {<br />
return i + j + k;<br />
}<br />
void B::g() {<br />
i = j = k = 0;<br />
}<br />
int main() {<br />
A a;<br />
B b;<br />
a.f(); a.g();<br />
b.f(); b.g();<br />
179<br />
✐<br />
✐<br />
✐<br />
✐