Post on 12-Jul-2015
Estructuras, clases, encapsulado, métodos, instancias, herencias
Mayo 2011
Fernando Di Bartolo
Estructuras
Estructuras
• Es una colección de una o mas variables de iguales o diferentes tipo
• Ayudan a organizar un conjunto de datos complicados
• Trata a esa colección de variables como a una única unidad
Estructuras
• Ejemplostruct punto {
int x;int y;
};
La palabra reservada struct presenta la declaración de la estructura, mientras que puntoes el nombre o rótulo de la misma.
Las variables x e y, son denominadas miembros.
Estructuras
• Declaración e inicializaciónstruct punto p1;struct punto p2 = {10, 35};
p1.x = 24;p1.y = 43;
El operador ‘.’ conecta al nombre de la estructura con el nombre del miembro
Estructuras
• Estructuras anidadas
struct rect {struct punto p1;struct punto p2;
};
struct rect pantalla;
pantalla.p1.x = 200;pantalla.p2.y = 180;
Clases
Clases
• Permite modelar objetos de la vida real
• Se representan a través de sus atributos o miembros de datos, y sus comportamientos o funciones miembro.
• Permite aislar comportamiento que no es de interés para los clientes de dicha clase
Métodos
Datos
Clases• Struct vs Class
struct Time {
int hora;
int minutos;
};
class Time {
private:
int hora;
int minutos;
public:
Time();
void setTime(int, int);
void printTime();
};
Clases
• Encapsulamiento– Modificadores de acceso:
• public
– Datos y funciones miembros son accesibles desde cualquier clase dentro del programa
• private
– Datos y funciones miembro solo son accesibles desde dentro de la clase
• protected
– Datos y funciones miembro son accesibles desde dentro de la clase, como así también desde clases derivadas de ella
ClasesLa clase puede ser la responsable de asegurar la integridad de sus datos
class Time {
private:
int hora;
int min;
public:
void setTime(int, int);
…
};
void Time::setTime(int h, int m)
{
hora = (h>=0 && h<24) ? h : 0;
min = (m>=0 && h<60) ? m : 0;
}
Clases
• Métodos o funciones miembro
– Representan acciones de la clase
– Aquellos que son públicos, hacen a la interfaz de la clase
– Existen otros métodos «de utilería» los cuales son usados para operaciones internas de la clase, invocados desde otros métodos
ClasesEjemplo:
class Time {
private:
int hora;
int min;
public:
void printTime();
…
};
void Time::printTime()
{
cout << ‘’La hora es ’’ << hora
<< ‘’:’’ << min << endl;
}
ClasesSobrecarga de métodos
class Time {
private:
int hora;
int min;
public:
void printTime();
void printTime(bool);
…
};
void Time::printTime()
{
cout << hora << ‘’:’’ << min << endl;
}
void Time::printTime(bool isMilitary)
{
if (isMilitary) {
//lógica conversión
}
cout << hora << ‘’:’’ << min << endl;
}
ClasesSobrecarga de métodos, otro ejemplo
class Calculator {
private:
…
public:
int Sumar(int, int);
float Sumar(float, float);
…
};
int Calculator::Sumar(int a, int b)
{
return (a+b);
}
float Calculator::Sumar
(float a, float b)
{
return (a+b);
}
Clases• Constructor
– Es una función miembro especial, que lleva el mismo nombre de la clase (C++)
– Se ejecuta automáticamente cuando se crea una instancia de la clase
– Entre otras cosas, se puede utilizar para inicializar los miembros de datos de la clase
– No tiene valor de retorno
Time::Time() {hora = min = 0;
}
Clases• Destructor
– Es otra función miembro especial, que lleva el mismo nombre de la clase, antepuesto por el tilde ~
– Se invoca automáticamente cuando el objeto sale del alcance
– Ejecuta trabajos de terminación, antes de que el sistema recupere el espacio de memoria ocupado
– No recibe parámetros, ni tiene valor de retorno
Time::~Time() {//lógica específica aquí
}
Herencia
Herencia
• Es una forma de reutilización de software donde nuevas clases son creadas a partir de otras, heredando su comportamiento
• La clase ya definida es la clase base, mientras que la heredera es la clase derivada
• Los datos y métodos protegidos (protected) de una clase base, son accesibles por la clase derivada.
Herencia
• Herencia simple
clase base
clases derivadas
public Auto: public Vehículo {…};
Vehículo
Moto Auto Camión
Herenciapublic Vehículo {
public:Vehículo(int); void PrintCantRuedas();
private:int _r;
};
public Moto : public Vehículo {public:
Moto();};
public Auto : public Vehículo {public:
Auto();};
Moto::Moto() : Vehículo(2) {}
Auto::Auto() : Vehículo(4) {}
Vehículo::Vehículo (int r) { _r = r; }
void Vehículo::PrintCantRuedas () { cout << ‘’Cantidad ruedas: ’’ << _r <<
endl; }
Herencia
main(){
Auto a;Moto m;
cout << ‘’Auto’’ << endl;a.PrintCantRuedas();
cout << ‘’Moto’’ << endl;m.PrintCantRuedas();
}
AutoCantidad ruedas: 4
MotoCantidad ruedas: 2
Salida
Herenciapublic Vehículo {
public:Vehículo(int); void PrintCantRuedas();void PrintLetraColor();
private:int _r;
protected:char _c;
};
public Moto { public Auto {public: public:
Moto(); Auto(); void SetLetraColor(char); void SetLetraColor(char);
}; };
void (Moto/Auto)::SetLetraColor(char c){ _c = c; }
void Vehículo::PrintLetraColor () { cout << ‘’Letra color: ’’ << _c << endl; }
Herenciamain(){
Auto a;Moto m;
cout << ‘’Auto’’ << endl;a.PrintCantRuedas();a.SetLetraColor(‘R’);a.PrintLetraColor();
cout << ‘’Moto’’ << endl;m.PrintCantRuedas();m.SetLetraColor(‘V’);m.PrintLetraColor();
}
AutoCantidad ruedas: 4Letra color: R
MotoCantidad ruedas: 2Letra color: V
Salida
Herencia
Redefinición de funciones miembro de clase base en clase derivada
public Vehículo {public:
…
void PrintLetraColor();};
public Moto : public Vehículo { public Auto : public Vehículo {public: public:
… …void PrintLetraColor(); void PrintLetraColor();
}; };
Herencia
Clase base directa e indirecta
Auto hereda directamente de vehículoSedan hereda directamente de autoSedan hereda indirectamente de vehículo
Vehículo
Sedan
Auto
Herencia
Herencia múltiple
La clase Anfibio hereda funcionalidad tanto de Vehículo (Andar) como así también de Embarcación (Navegar)
public Anfibio: public Vehículo, public Embarcación
{ … };
Vehículo
Moto Auto Anfibio
Embarcación
Barco Velero