Clase 3 HERENCIA Y AMISTAD
Clase 3 HERENCIA Y AMISTAD
Clase 3 HERENCIA Y AMISTAD
Herencia simple
#include <iostream>
using namespace std;
class Vehiculo {
public:
void avanza() {}
};
int main()
{
Moto t;
Coche c;
t.avanza();
c.avanza();
return 0;
}
Herencia múltiple
Se encuentra en aquellos casos en los que una clase derivada tiene varias clases
base (al menos, más de una). Un ejemplo sería una clase ProfesorUniversitario
que heredara de las clases Profesor e Investigador.
La clase Profesor declararía la información que deseamos conocer sobre los
profesores: su nombre y la materia que imparten.
class Profesor {
private:
string nombre;
string materia;
public:
Profesor(const string &n, const string &m) : nombre( n ), materia( m )
{}
const string &getNombre() const
{ return nombre; }
const string &getMateria() const
{ return materia; }
};
class Investigador {
private:
string nombre;
string especialidad;
public:
Investigador (const string &n, const string &e) : nombre( n ),
especialidad( e )
{}
const string &getNombre() const
{ return nombre; }
const string &getEspecialidad() const
{ return especialidad; }
};
Herencia privada
Clases amigas
La “amistad” es una característica que permite que una función que no pertenece
a una clase en particular, pueda hacer uso de sus métodos. Los métodos amigos
de una clase no pertenecen a ella, pero se les permite el acceso a sus miembros
privados y protegidos.
Métodos amigos
Funciones Amigas
Una función amiga es una función que se define fuera de una clase pero que tiene
derecho a acceder a los miembros privados y protegidos de ella. Para que una
función sea amiga de una clase, y por consiguiente tenga acceso a todos sus
métodos, primero se define un prototipo de esa función dentro de la clase, y se
antepone a dicha definición la palabra “friend”. Además de esto, es necesario que
a la función amiga se le pase como parámetro un objeto de la clase de la cual es
amiga.
Ejemplo:
#include<iostream>
using namespace std;
class Temperatura {
int minima, maxima, actual;
public:
Temperatura(int min, int max, int act){ minima = min; maxima = max; actual = act; }
friend int temperaturaMedia(Temperatura t1, Temperatura t2);
};
int temperaturaMedia(Temperatura t1, Temperatura t2){
int pro =(t1.actual + t2.actual)/2;
return pro;
}
int main(){
Temperatura temperatura1(10, 20, 15);
Temperatura temperatura2(12, 25, 17);
cout << "La temperatura promedio de las temperaturas actuales es: ";
cout << temperaturaMedia(temperatura1, temperatura2)<<endl;
return 0;
}
Ejercicios:
1.- Usando herencia. Se necesita implementar dos clases llamadas Suma y Resta.
Cada clase tiene como atributo valor1, valor2 y resultado.
Las propiedades a definir son Valor1, Valor2 y Resultado
El método Operar (que en el caso de la clase "Suma" suma los dos Valores y en el caso de la
clase "Resta" hace la diferencia entre Valor1 y Valor2.)
Solucion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Herencia
{
public class Operacion
{
protected int valor1;
protected int valor2;
protected int resultado;
public int Valor1
{
set
{
valor1 = value;
}
get
{
return valor1;
}
}
public int Valor2
{
set
{
valor2 = value;
}
get
{
return valor2;
}
}
public int Resultado
{
protected set
{
resultado = value;
}
get
{
return resultado;
}
}
}
public class Suma : Operacion
{
public void Operar()
{
Resultado = Valor1 + Valor2;
}
}
public class Resta : Operacion
{
public void Operar()
{
Resultado = Valor1 - Valor2;
}
}
class Prueba
{
static void Main(string[] args)
{
Suma suma1 = new Suma();
suma1.Valor1 = 10;
suma1.Valor2 = 7;
suma1.Operar();
Console.WriteLine("La suma de " + suma1.Valor1 + " y " +
suma1.Valor2 + " es " + suma1.Resultado);
Resta resta1 = new Resta();
resta1.Valor1 = 8;
resta1.Valor2 = 4;
resta1.Operar();
Console.WriteLine("La diferencia de " + resta1.Valor1 +
" y " + resta1.Valor2 + " es " + resta1.Resultado);
Console.ReadKey();
}
}
}