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