Java - String y StringBuffer para C++

 
Vista:

String y StringBuffer para C++

Publicado por Juan Alberto (2 intervenciones) el 08/08/2005 22:09:40
Hola, alguien puede ayudarme con un codigo en c++
la idea es implementar las clases String y StringBuffer de Java, ademas de implementar un recolector de basura
De antemano les agradezco
OK!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:String y StringBuffer para C++

Publicado por J Hilario (54 intervenciones) el 09/08/2005 18:39:34
En C++ puedes investigar a cerca de la sobrecarga de operadores para que puedas implementar el comportamiento de la clase String de java de concatenacion (+). La implementación de tus strings puede basarse en apuntadores o listas ligadas. Para el caso de la clase String necesitarás liberar la memoria del apuntador original y crear uno nuevo, porque los String no se modifican en Java, por ejemplo si quisieras concatenar las cadenas

class String {

char *s; // apuntador que representa la cadena de caracteres

/*operador + sobrecargado, no recuerdo la sintáxis*/ (String string2)
{
nuevacadena = (char*) malloc(sizeof(char) * (string2.length() + strlen(s))); // o utiliza el operador new junto con delete
if (nuevacadena != null) {
nuevacadena = strconcat(s, String2.getPointer());
s = nuevacadena;
free(s):
} else { /* Error*/ }
}

public int length()
{
return strlen(s);
}

private char* getPointer()
{
return s;
}

}

Para el caso de StringBuffer tienes la alternativa de utilizar la función realloc para reasignar un bloque de cadea de mayor o menor tamaño. Recuerda ser muy cuidadoso con los apuntadores utilizando los constructores y destructores adecuadamente. Para el caso del garbage collector no se me ocurre mucho, quizá podrías en lugar de utilizar directamente malloc, realloc y free o los operadoes new y delete implementar tu propia clase de administración de memoria. Con esta clase tu solo asignas la memoria pero no la liberas, pasado cierto tiempo sin uso de una región puedes liberarla. Sobre C en Unix puedes utilizar hilos para hacer esta tarea en forma alterna, en Windows, C++ Builder también implementa el mecanismo, no sé que otras implementaciones de C lo hagan, pero también puedes consultar implementaciones del garbage collector de java en internet o bien informacion al respecto. Espero al menos contribuir con alguna idea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar