Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda acerca de la sobrecarga de getline

Estas en el tema de Duda acerca de la sobrecarga de getline en el foro de C/C++ en Foros del Web. Estoy haciendo mi propia biblioteca string, entonces estoy intentando entender como hacer el getline y como hacer el llamado en el programa prueba, hasta ahora ...
  #1 (permalink)  
Antiguo 09/06/2015, 19:52
 
Fecha de Ingreso: junio-2015
Ubicación: Mérida
Mensajes: 1
Antigüedad: 8 años, 10 meses
Puntos: 0
Pregunta Duda acerca de la sobrecarga de getline

Estoy haciendo mi propia biblioteca string, entonces estoy intentando entender como hacer el getline y como hacer el llamado en el programa prueba, hasta ahora lo había hecho así en la clase:

Código:
void CCadena::getline(CCadena& c, int tamanio){
   delete [] this->p;
   this->p = new char[tamanio];
   std::cin.getline(this->p,tamanio);
}
Pero al hacer la llamada la hago así: cadena.getline(cadena,140);

Así que básicamente no le encontré sentido a lo que hago...

Creo que la idea básica de la sobrecarga es intentar leer una línea completa llamando a la función como se hace para una cadena común, es decir: "std::cin.getline(string, 140);"

Alguien, sabe si es posible? y si lo es... puede explicarme un poco como?

En realidad estoy un poco desesperada ya, he intentado un montón de cosas y no sé qué hacer.

Les agradezco de antemano
  #2 (permalink)  
Antiguo 10/06/2015, 00:42
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Duda acerca de la sobrecarga de getline

Lo de crear tu propia versión de la librería es por aprender o porque no quieres usar la librería oficial?

Si es por lo primero... pase, si no yo desistiría en tu intento.

En cualquier caso. Veo algunas inconsistencias en tu función:

  • CCadena& c: Este argumento sobra. Sólo tendría sentido si la función getline fuese estática, que no lo es.
  • ¿Por qué getline es un miembro de CCadena?. Si CCadena intenta ser un sustituto de la clase std::string, sus responsabilidades deberían limitarse a la gestión de la cadena. Interactuar con la entrada / salida no debería ser parte de su implementación
  • Lo de borrar el puntero interno y volverlo a asignar únicamente tiene sentido si el espacio actualmente reservado es insuficiente. En caso contrario lo mejor es reutilizar la memoria
  • Cuando haces una reserva nueva no almacenas en ningún sitio el nuevo tamaño. Deberías guardar ese valor para evitar reservas innecesarias.


Y luego, como comentas, no tiene demasiado sentido que en tu propia versión de getline acabes llamando a cin.getline.

Piensa que la librería estándar se apoya directamente en el sistema operativo para, por ejemplo, interactuar con la entrada / salida. Si haces una librería paralela lo suyo sería que ésta se conectase directamente con la API del sistema operativo en vez de hacer uso de la librería estándar... si no estás poniendo un pegote sin mucho sentido sobre la librería estándar.

Un saludo

Etiquetas: c++, getline
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:26.