elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Sobrecarga de operador
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Sobrecarga de operador  (Leído 4,927 veces)
RayR

Desconectado Desconectado

Mensajes: 239


Ver Perfil
Re: Sobrecarga de operador
« Respuesta #10 en: 18 Mayo 2019, 03:39 am »

Gracias por las respuestas..

me queda claro todo, lo único si que no comprendí bien el por qué de dos cosas

por qué dices que no debo usar system("cls"); de que otra forma puedo limpiar pantalla?..  (conozco otro método que es insertar 100 lineas vacías pero esto haría que el contenido se muestre abajo)

y lo otro, es el std::endl;  la otra forma que conozco es con la secuencia de escape \n

Saludos!

Aunque no fui yo quien te mencionó esos dos puntos, aquí te comento algunas cosas.

Deberías evitar llamar a system(), ya que lo que sucede cuando la invocas no es simplemente que estés llamando a una función (como pasa con printf, scanf, etc.) sino que creas un proceso nuevo, en el cual ejecutas un programa distinto al tuyo, y todo eso es bastante pesado, y casi nunca se justifica. Es una práctica bastante mala.

Lamentablemente no hay una forma estándar de limpiar la pantalla. Insertar líneas es una solución pobre y, como dices, no te deja el cursor al inicio (a menos que en tu programa lleves todo el tiempo un seguimiento de dónde está el cursor). La forma de hacerlo es específica de cada sistema operativo. En Windows es una manera bastante fea y requiere varias líneas de código, pero es lo que hay. Existen bibliotecas/librerías multiplataforma, como ncurses, pero para algo tan simple, no le veo mucho sentido a usarlas. En casos así, yo siempre recurro a las APIs de cada SO, que además suelen ser más eficientes y dar menos problemas.

En cuanto a std::endl, no hay nada de malo en que la uses, salvo que estás tecleando de más sin necesidad. Es común leer que, dado que endl provoca que además de imprimir una nueva línea, se limpie el buffer (lo que ocasiona que se escriban/muestren inmediatamente los datos) es menos eficiente que '\n' (que sólo imprime una nueva línea, sin limpiar el buffer, por lo que los datos podrían no imprimirse en ese momento) pero a cambio garantiza que los datos se muestren correctamente, cuando deben. Todo eso aplica cuando estamos escribiendo a un archivo, pero cuando estamos usando la salida estándar stdout (la consola/terminal/línea de comandos), como en el caso de cout, no hay ninguna diferencia. En Linux, de forma predeterminada stdout es "line buffered", es decir, el buffer se limpia automáticamente cuando se encuentra un caracter de nueva línea, así que ambos, endl y '\n', tienen el mismo efecto. En Windows stdout ni siquiera usa buffer (por defecto) así que imprimas lo que imprimas, se mostrará tan pronto como sea posible. De nuevo, es irrelevante si usas endl o '\n'.


En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
sobrecarga de operador<<
Programación C/C++
adam96 5 4,260 Último mensaje 17 Diciembre 2010, 19:10 pm
por Littlehorse
Sobrecarga operador +
Programación C/C++
_Enko 4 2,312 Último mensaje 6 Febrero 2015, 14:56 pm
por _Enko
Sobrecarga operador -> [C++]
Programación C/C++
K-YreX 2 1,534 Último mensaje 6 Enero 2019, 17:21 pm
por K-YreX
Sobrecarga de operador y constructores/destructores
Programación C/C++
digimikeh 8 2,465 Último mensaje 18 Junio 2019, 15:35 pm
por digimikeh
Sobrecarga operador+ y miembro puntero...
Programación C/C++
digimikeh 5 1,758 Último mensaje 19 Junio 2019, 05:22 am
por digimikeh
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines