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 157 — #195<br />

✐<br />

4.6. Detalles del objeto<br />

Sin embargo, notará inmediatam<strong>en</strong>te una difer<strong>en</strong>cia <strong>en</strong> la forma <strong>en</strong> que se realizan<br />

las operaciones sobre los objetos. Se hace objeto.funciónMiembro(listaArgum<strong>en</strong>tos)<br />

o sea, «se llama a un método de un objeto». Pero <strong>en</strong> la jerga de la<br />

ori<strong>en</strong>tación a objetos, eso también se d<strong>en</strong>omina «<strong>en</strong>viar un m<strong>en</strong>saje a un objeto». De<br />

modo que para una Stash s, <strong>en</strong> esta jerga la s<strong>en</strong>t<strong>en</strong>cia s.add(&i) le «<strong>en</strong>vía un<br />

m<strong>en</strong>saje a s» diciéndole «añadete (add()) esto». De hecho, la programación ori<strong>en</strong>tada<br />

a objetos se puede resumir <strong>en</strong> la sigui<strong>en</strong>te frase: <strong>en</strong>viar m<strong>en</strong>sajes a objetos. Realm<strong>en</strong>te,<br />

¿eso es todo lo que se hace crear un montón de objetos y <strong>en</strong>viarles m<strong>en</strong>sajes.<br />

El truco, obviam<strong>en</strong>te, es <strong>en</strong>t<strong>en</strong>der qué son <strong>en</strong> nuestro problema los objetos y los m<strong>en</strong>sajes,<br />

pero una vez que se ha cumplido esa etapa, la implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> será<br />

sorpr<strong>en</strong>d<strong>en</strong>tem<strong>en</strong>te directa.<br />

4.6. Detalles del objeto<br />

Una pregunta que surge a m<strong>en</strong>udo <strong>en</strong> seminarios es «¿Cómo de grande es un<br />

objeto y qué pinta ti<strong>en</strong>e» La respuesta es «más o m<strong>en</strong>os lo que esperas de un struct<br />

<strong>en</strong> C». De hecho, el código que produce el compilador de C para un struct<br />

C (sin adornos <strong>C++</strong>) normalm<strong>en</strong>te es exactam<strong>en</strong>te el mismo que el producido por<br />

un compilador <strong>C++</strong>. Eso tranquiliza a aquellos programadores C que dep<strong>en</strong>dan de<br />

los detalles de tamaño y distribución de su código, y que por alguna razón accedan<br />

directam<strong>en</strong>te a los bytes de la estructura <strong>en</strong> lugar de usar id<strong>en</strong>tificadores (confiar <strong>en</strong><br />

un tamaño y distribución particular para una estructura no es portable).<br />

El tamaño de una struct es la combinación de los tamaños de todos sus miembros.<br />

A veces cuando el compilador crea una struct, añade bytes extra para hacer<br />

que los límites <strong>en</strong>caj<strong>en</strong> limpiam<strong>en</strong>te - eso puede increm<strong>en</strong>tar la efici<strong>en</strong>cia de la ejecución.<br />

En el Capítulo 14, verá cómo <strong>en</strong> algunos casos se añad<strong>en</strong> punteros «secretos» a<br />

la estructura, pero no ti<strong>en</strong>e que preocuparse de eso ahora.<br />

Puede determinar el tamaño de una struct usando el operador sizeof. Aquí<br />

ti<strong>en</strong>e un pequeño ejemplo:<br />

//: C04:Sizeof.cpp<br />

// Sizes of structs<br />

#include "CLib.h"<br />

#include "CppLib.h"<br />

#include <br />

using namespace std;<br />

struct A {<br />

int i[100];<br />

};<br />

struct B {<br />

void f();<br />

};<br />

void B::f() {}<br />

int main() {<br />

cout

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

Saved successfully!

Ooh no, something went wrong!