Visual C++ .NET - FUNCIONES AMIGAS Y VIRTUALES

 
Vista:

FUNCIONES AMIGAS Y VIRTUALES

Publicado por Carlos (2 intervenciones) el 06/07/2007 18:28:35
POR FAVOR EXPLIQUENME ESTE EJEMPLO:
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
class base{
public:
int i;
base(int x){i=x;}
virtual void func(){cout<<i<<"\n";}
};

class derivada1:public base{
public:
derivada1(int x):base(x){};
void func(){ cout <<i*i<<"\n";}
};

class derivada2:public base{
public:
derivada2(int x):base(x){};
void func(){cout<<i+i;}
};

void main()
{
base obj1(10);
derivada1 obj2(10);
derivada2 obj3(10);
obj1.func();
obj2.func();
obj3.func();
getch();
}
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
Imágen de perfil de Alejandro

Ejemplo de herencia, funciones virtuales y polimorfismo en C++ Builder

Publicado por Alejandro (265 intervenciones) el 01/02/2024 20:17:12
Carlos, este ejemplo en C++ ilustra conceptos importantes de la programación orientada a objetos, como la herencia y las funciones virtuales. Aquí hay una explicación detallada:

1. Definición de la clase base (`base`):
- La clase `base` tiene un miembro de datos `i` y un constructor que inicializa `i` con un valor pasado como parámetro.
- Contiene una función virtual llamada `func()`, que imprime el valor de `i`.

2. Definición de la primera clase derivada (`derivada1`):
- La clase `derivada1` hereda de la clase `base`.
- Su constructor inicializa la parte de la clase base (`base(x)`).
- Sobrescribe la función virtual `func()` de la clase base y calcula el cuadrado de `i`.

3. Definición de la segunda clase derivada (`derivada2`):
- Similar a `derivada1`, `derivada2` hereda de `base` y tiene su propio constructor.
- También sobrescribe la función virtual `func()`, pero esta vez imprime el doble del valor de `i`.

4. Función principal (`main`):
- Crea instancias de `base`, `derivada1`, y `derivada2` llamadas `obj1`, `obj2`, y `obj3`, respectivamente.
- Llama a la función `func()` en cada objeto.
- Debido al uso de funciones virtuales, se utiliza la función adecuada en tiempo de ejecución según el tipo real del objeto.

5. Salida esperada:
- `obj1.func()`: Imprime el valor de `i` (10) desde la clase base.
- `obj2.func()`: Imprime el cuadrado de `i` (100) desde la clase derivada1.
- `obj3.func()`: Imprime el doble de `i` (20) desde la clase derivada2.

El uso de funciones virtuales permite el polimorfismo, lo que significa que el tipo de función que se ejecuta depende del tipo real del objeto en tiempo de ejecución. Esto es fundamental para lograr comportamientos específicos de las clases derivadas al llamar a funciones de la clase base.
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