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 217 — #255<br />
✐<br />
7.5. Elección <strong>en</strong>tre sobrecarga y argum<strong>en</strong>tos por defecto<br />
después del constructor por defecto), la nueva porción de más se pone a cero utilizando<br />
la función de la librería estándar de C memset(), que fue pres<strong>en</strong>tada <strong>en</strong> el<br />
Capítulo 5. La sigui<strong>en</strong>te llamada es a la función de la librería estándar de C memcpy(),<br />
que <strong>en</strong> este caso copia los octetos exist<strong>en</strong>tes de mem a newmem (normalm<strong>en</strong>te<br />
de una manera eficaz). Finalm<strong>en</strong>te, se libera la memoria antigua y se asignan a los<br />
atributos apropiados la nueva memoria y su tamaño.<br />
La clase Mem se ha diseñado para su utilización como herrami<strong>en</strong>ta d<strong>en</strong>tro de otras<br />
clases para simplificar su gestión de la memoria (también se podría utilizar para<br />
ocultar un sistema de gestión de memoria más avanzada proporcionado, por ejemplo,<br />
por el el sistema operativo). Esta clase se comprueba aquí con una simple clase<br />
de tipo string:<br />
//: C07:MemTest.cpp<br />
// Testing the Mem class<br />
//{L} Mem<br />
#include "Mem.h"<br />
#include <br />
#include <br />
using namespace std;<br />
class MyString {<br />
Mem* buf;<br />
public:<br />
MyString();<br />
MyString(char* str);<br />
~MyString();<br />
void concat(char* str);<br />
void print(ostream& os);<br />
};<br />
MyString::MyString() { buf = 0; }<br />
MyString::MyString(char* str) {<br />
buf = new Mem(strl<strong>en</strong>(str) + 1);<br />
strcpy((char*)buf->pointer(), str);<br />
}<br />
void MyString::concat(char* str) {<br />
if(!buf) buf = new Mem;<br />
strcat((char*)buf->pointer(<br />
buf->msize() + strl<strong>en</strong>(str) + 1), str);<br />
}<br />
void MyString::print(ostream& os) {<br />
if(!buf) return;<br />
os pointer()