Estructuras y clases

Post on 12-Jul-2015

1.234 views 0 download

Transcript of Estructuras y clases

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