Академический Документы
Профессиональный Документы
Культура Документы
FUNCIONES AMIGAS
EJERCICIO #1
Diseñe una clase llamada ECUACION cuyos atributos sea X,Y, Xi( VALOR INICIAL) ,Xf(VALOR_FINAL)
𝑌 = 𝑠𝑒𝑛(𝑋) + 𝑋
Declare una función amiga que evalué la función y almacene los resultados de X y Y en arreglos
Ejemplo de salida:
x Y=sen(X)+X
-2
-1.5
-1
0.5
0
0.5
1
1.5
2
HERENCIA Y CLASES AMIGAS
EJERCICIO #2
EJERCICIO #3
EJERCICIO #4
Defina la clase CadenaCar según las especificaciones que se muestran a continuación. Incluya la
sobrecarga de los siguientes operadores:==,!=,+,< y > de tal manera que dos objetos tipo
CadenaCar se puedan comparar(==,!=,<,>) o unir (+) usando los operadores indicados.
CadenaCar
Cadena:string
Constructor(es)
int operator == (CadenaCar Cad)
int operator ¡=(CadenaCar Cad)
int operator < (CadenaCar Cad)
int operator >(CadenaCar Cad)
CadenaCar operator + (CadenaCar Cad)
Void Imprime()
Salida:
Fruta
NombreFruta:string
Color:string
Constructor(es)
int operator == (Fruta Cad)
friend istrem &operator >>(istream &L,Fruta &f)
friend ostream &operator<<(ostream &V, Fruta
&f)
Int main()
{
Fruta fruta1, fruta2;
cin>>fruta1;
cin>>fruta2;
cout<<”FRUTA 1”<<endl;
cout<<fruta1;
cout<<”FRUTA 2”<<endl;
cout<<fruta2;
if (fruta1==fruta2)
{
cout<<”Son iguales”<<endl;
}
else
cout<<”Son diferentes”<<endl;
getch();
return 0;
}
TEORICO 1.
Una función amiga se define como una función no miembro normal. Sin embargo, dentro de la
declaración de clase para la que será una función amiga, está también incluido su prototipo,
precedido por la palabra clave friend.
Una función amiga no es un miembro de una clase, pero tiene acceso a sus elementos privados.
sintaxis
Class nombre_clase {
Friend función_amiga();
{(sentencias)}//
Una clase amiga (friend) es una clase cuyas funciones miembros son funciones miembros de la
clase; esto es, cuyas funciones miembros tienen acceso a otros miembros privados y protegidos de
la clase.
Sintaxis
Friend <identificador>;
3. Características de la amistad
Sintaxis
#include <iostream>
class Numero
public:
Numero(double x = 0);
private:
double x;
};
//Constructor
Numero::Numero(double b)
{establecer( b );}
void Numero::establecer(double a)
{x = a;}
return temporal;
Numero temporal;
return temporal;
if (b.x == 0){
exit(1);
Numero temporal;
return temporal;
Numero temporal;
return temporal;
return salida;
//Probamos la clase.
int main()
Numero A;
cin >> A;
Numero B;
cin >> B;
Numero C;
cin >> C;
cout << "A = " << A << ", B = " << B << ", C = " << C << endl;
Numero resultado;
resultado = A - B + C;
resultado = A / B ;
resultado = A * resultado;
resultado = B * resultado / A;
return 0;
}
5. ¿Porque surge la necesidad de sobrecarga un operador o una función?
Porque permite que puedan aceptar otro tipo de operandos (distintos de los tipos básicos) y seguir
otro comportamiento, al tiempo que conservan el sentido y comportamiento originales cuando se
usan con los operandos normales.
Una plantilla es una manera especial de escribir funciones y clases para que estas puedan ser
usadas con cualquier tipo de dato, similar a la sobrecarga, en el caso de las funciones, pero
evitando el trabajo de escribir cada versión de la función.
7. Tipos de plantillas.
Plantillas de función:
Es un modelo de función que el compilador de C++ usará para construir diferentes versiones de
una misma función, según los tipos de datos que se especifique al invocar la misma.
Plantillas de clases:
El sistema de plantillas nos permite definir una clase genérica que permita crear espelizaciones o
instancias de dicha plantilla para cualquier tipo especificado por un parámetro.
Plantillas en C++:
la STL (standard template library) viene por defecto en los compiladores C++. Esta
biblioteca incluye un juego de contenedores genéricos especialmente: vectores y listas
encadenadas.
La BGL (Bosst Graph Lybrary) proporciona clases de grafo genéricos y los algoritmos
correspondientes (algoritmo del camino más corto, algoritmo de flot..).
Sintaxis
Ejemplo
int main(){
int a = 1, b = 2, n;
return 0;
Sintaxis
Ejemplo
class Coordenada{
private:
T x; //atributos de tipo T
T y;
public:
T dameX(){return x};
Coordenada<T>::Coordenada(T x, T y){
this -> x = x;
this -> y = y;
Con esta clase podemos instanciar objetos que representan coordenadas de cualquier tipo de
dato, por ejemplo:
Las plantillas nos permiten parametrizar estas clases para adaptarlas a cualquier tipo de dato.
En el caso de las clases, ya que no se permite hacer sobrecarga de ellas y tendríamos que
decidirnos por una sola o hacer especializaciones usando la herencia, y al usar plantillas nos
evitamos de esto.