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

 

 


Tema destacado: Estamos en la red social de Mastodon


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

Desconectado Desconectado

Mensajes: 137



Ver Perfil
"Funcion virtual pura" en C++.
« en: 1 Noviembre 2023, 16:29 pm »

Hola,

Estoy leyendo el libro de Stroustrup de C++ para entender que es lo que supuestamente lo hace mejor que C y me encontre con este ejemplo,

Código
  1. class Container {
  2. public:
  3. virtual double& operator[](int) = 0;
  4. virtual int size() const = 0;
  5. virtual ˜Container() {}
  6. };

En esta linea:

Citar
virtual double& operator[](int) = 0;

¿Que significa asignar la funcion a 0? ¿Seria como hacer esto?

Código
  1. double& Container::operator[](int) {
  2.    return 0;
  3. }



Por cierto, ¿Que significa const en la funcion size?
Y ¿Cual es la diferencia entre una funcion puramente virtual y una funcion virtual?


« Última modificación: 1 Noviembre 2023, 16:50 pm por 4v1dy4 » En línea

199XAD

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: "Funcion virtual pura" en C++.
« Respuesta #1 en: 2 Noviembre 2023, 22:11 pm »

Código
  1. double& Container::operator[](int) {
  2.    return 0;
  3. }

Aquí hay un problema, pues no es posible regresar una referencia a un valor constante, un rvalue, o a una variable que hayas declarado localmente a esa función porque cuando termine su ámbito, esta variable será destruida o liberada del stack y tendrías una referencia colgante. Aunque luego se haya implementado en el lenguaje las referencias a rvalue, eso ya es un tema un poco más avanzado, se usa en la semántica de movimiento por si quieras investigar.
Código
  1. virtual double& operator[](int) = 0;
Esta línea de aquí en realidad indica que esa función es abstracta, es decir, que se espera que aquella clase que herede de la clase Container implemente la lógica de tal función.

El const en la función size, justo ahí puesto, significa que esa función no modifica ningún objeto miembro de esa clase.
Y la diferencia entre una función pura virtual y virtual, es que la primera no tiene una implementación por defecto (de ahí el igual a cero) y la segunda sí, por lo que sé.

Para aprender estos detalles técnicos, te recomiendo los vídeos del profesor retroman en youtube, sabe demasiado.  ;-)


« Última modificación: 2 Noviembre 2023, 22:20 pm por 199XAD » En línea

4v1dy4

Desconectado Desconectado

Mensajes: 137



Ver Perfil
Re: "Funcion virtual pura" en C++.
« Respuesta #2 en: 3 Noviembre 2023, 16:51 pm »

Muchas gracias, todo claro.

Algo que seguramente nunca entendere es por que la programacion orientada a objetos existe realmente.
En línea

199XAD

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: "Funcion virtual pura" en C++.
« Respuesta #3 en: 4 Noviembre 2023, 07:04 am »

Técnicamente no es necesaria, prueba de eso es el teorema del programa estructurado, que dice:
Citar
Toda función computable puede ser implementada en un lenguaje de programación que combine tres subrutinas de control: secuencia, selección e iteración.
Lo que sí es cierto es que facilita el desarrollo de software o al menos hace que el código sea más entendible y manejable, aunque la POO de C++ es algo infernal cuando metes templates y metaprogramación.
En línea

4v1dy4

Desconectado Desconectado

Mensajes: 137



Ver Perfil
Re: "Funcion virtual pura" en C++.
« Respuesta #4 en: 4 Noviembre 2023, 13:32 pm »

La experiencia que tengo en programacion orientada a objetos es mas bien pobre. Al menos comparada con la programacion estructurada.

No se si tu seas mas afin a la programacion estructurada o a la OOP, pero, te soy sincero, a veces me da un poco de disgusto incluso leer lo "bonito" que es el codigo orientado a objetos. Es como una burla.

Me parece realmente indignante que en la industria, si no conoces lenguajes de este tipo, estas basicamente perdido.

No son eficientes, no son acordes a la maquina, no son precisos y tienden al error.

Si me preguntas, son lenguajes hechos para programadores que programan pensando en fallar.

Perdona la descarga emocional.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines