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

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

Saved successfully!

Ooh no, something went wrong!