PDF de programación - Tema 2: Clase y objetos en C++

Imágen de pdf Tema 2: Clase y objetos en C++

Tema 2: Clase y objetos en C++gráfica de visualizaciones

Publicado el 24 de Enero del 2017
1.785 visualizaciones desde el 24 de Enero del 2017
131,1 KB
57 paginas
Creado hace 15a (24/11/2008)
Tema 2: Clase y objetos en C++

Programación Orientada a Objetos

Curso 2008/2009
Begoña Moros Valle

Contenido
Introducción
Módulos en C++:

Clases
Estructuras (struct)
Espacios de nombres (namespace)

Semántica referencia

Semántica de los operadores “==“ e “=“

Métodos y mensajes
Creación y destrucción de objetos
Genericidad template

Tema 2

Clases y Objetos

2

Introducción

Creado por Bjarne Stroustrup en los 80.
Diseñado como una extensión de C que incluye

características orientadas a objetos.
Es un lenguaje híbrido.

Ha sido inspiración de lenguajes de programación

posteriores como Java y C#.

A finales de los 90 fue estandarizado: ISO C++
Las librerías del lenguaje son escasas. La librería más

notable es STL (Standard TemplateLibrary).

Actualmente, sigue siendo un lenguaje de programación

importante en algunos dominios.

Tema 2

Clases y Objetos

3

Especificación de la clase Cuenta

A diferencia de Java una clase se implementa en

ficheros separados para:
Definición de la interfaz de la clase (fichero cabecera)
La implementación Cuenta.cpp

Cuenta.h

Hay que incluir el fichero de cabecera en el fichero de

implementación y en los ficheros de las clases cliente
#include “Cuenta.h”

No tiene por qué existir correspondencia entre la
estructura física de un programa (organización de
ficheros fuente) y la estructura lógica (organización de
las clases).

Tema 2

Clases y Objetos

4

Especificación de la clase Cuenta

Cuenta.h

Interfaz de la clase
cuenta

Banco.cpp

Cuenta.cpp

#include “Cuenta.h”
utiliza Cuenta

#include “Cuenta.h”
implementa Cuenta

Tema 2

Clases y Objetos



5

Cuenta.h (1/2)
#include "Persona.h“

class Cuenta {
public:

void reintegro(double cantidad);
void ingreso(double cantidad);
double getSaldo() const;
Persona* getTitular() const;
double* getUltimasOperaciones(int n) const;
static int getNumeroCtas();


Tema 2

Clases y Objetos

6

Cuenta.h (2/2)
private:

const static int MAX_OPERACIONES = 20;
const static double SALDO_MINIMO = 100;

Persona* titular;
double saldo;
int codigo;
static int ultimoCodigo;
double* ultimasOperaciones;
bool puedoSacar(double cantidad);

};

Tema 2

Clases y Objetos

7

Cuenta.cpp
int Cuenta::ultimoCodigo = 0;
void Cuenta::reintegro(double cantidad){

if (puedoSacar(cantidad))

saldo = saldo - cantidad;

}

}
void Cuenta::ingreso(double cantidad){

saldo = saldo + cantidad;

}
bool Cuenta::puedoSacar(double cantidad){

return (saldo >= cantidad);

}


Tema 2

Clases y Objetos

8

Clases en C++

(static) como de instancia (= Java).

Se pueden definir tanto atributos y métodos de clase
Palabra reservada const

Indica que un atributo es inmutable
Equivalente a atributos final en Java
const Persona* titular; puntero inmutable
Persona* const titular; objeto persona inmutable

Indica que la ejecución de una función no va a cambiar el

estado del objeto receptor de la llamada

En el fichero de implementación el nombre de los

métodos está calificado con la clase.
NombreClase::nombreMetodo

Tema 2

Clases y Objetos

9

Niveles de visibilidad en C++

Especificación de acceso para un grupo de
miembros:
public: un cliente puede consultarlo y modificarlo
private: sólo accesible dentro de la clase

Opción por defecto
Se puede acceder a los campos privados de los objetos de

la misma clase como en Java

Clases amigas: Se le concede acceso TOTAL

a la clase amiga
La amistad no es hereditaria ni transitiva

Tema 2

Clases y Objetos

10

Ejemplo: friend class

class NodoArbol {

friend class Arbol;
private:

class Arbol{

private:

int valor;
NodoArbol decha;
NodoArbol izda;



};

};

NodoArbol *raiz;
...

… raiz->valor = 50; ...

Tema 2

Clases y Objetos

11

Concepto de estructura

Unidad modular heredada de C

en C++ se amplía con la definición de funciones

Totalmente equivalente al concepto de clase salvo:

Cambia la palabra class por struct
Por defecto todos los elementos son públicos salvo que se diga

lo contrario.

struct Cuenta{

void ingreso (double cantidad);
void reintrego (double cantidad);
private:
int codigo;
Persona* titular;
double saldo;

};
Tema 2

Clases y Objetos

12

Espacio de nombres

El espacio de nombres (namespace) es un
mecanismo para agrupar un conjunto de
elementos (clases, enumerados, funciones,
etc.) relacionados

Es importante el orden de definición de los

elementos en el espacio de nombres

Puede estar definido en ficheros diferentes
Es un concepto diferente a los paquetes de

Java:
No hay relación entre la estructura lógica y física.
No proporcionan privilegio de visibilidad.

Tema 2

Clases y Objetos

13

Espacio de nombres

Para utilizar un elemento definido en un espacio

de nombres:

Se utiliza el nombre calificado del elemento:

gestionCuentas::Cuenta

Se declara el uso del espacio de nombres:

using namespace banco;

Tema 2

Clases y Objetos

14

Espacio de nombres

En Cuenta.h

namespace gestionCuentas{

class Cuenta {



};

}

En Banco.h

namespace gestionCuentas{

class Banco {



};

}

Tema 2

Clases y Objetos

15

Tipos del lenguaje
Tipos de datos primitivos:

byte, short, int, long,float, double,char,
bool, etc.
Enumerados:
Objetos embebidos:

enum {OPERATIVA, INMOVILIZADA, NUM_ROJOS};

Subojetos
Punteros:

T* es el tipo “puntero a T”
Una variable de tipo T* puede contener la dirección

de un objeto de tipo T

Tema 2

Clases y Objetos

16

Arrays en C++
Cuenta cuentas[10];

cuentas es un array de tamaño 10
No se asigna un valor inicial para cada posición

Cuenta* cuentas = new Cuenta[10];
Cuenta** cuentas = new Cuenta*[10];

cuentas es un ptro a un array de cuentas

cuentas es ptro a un array de punteros a Cuenta (= Java)

Las dos primeras declaraciones sólo funcionarían si la

clase cuenta tuviera definido un constructor por defecto

No existe una función equivalente a length de Java
No se controla el acceso a posiciones fuera de los

límites del array.
Tema 2

Clases y Objetos

17

Enumerados

Es un tipo que puede almacenar un conjunto de

valores

El enumerado define un conjunto de constantes

de tipo entero

Por defecto los valores se asignan de forma

creciente desde 0.

El tipo de cada uno de los elementos es el del

enumerado.

Un enumerado es un tipo, por lo que el usuario

puede definir sus propias operaciones.

Tema 2

Clases y Objetos

18

Enumerados. Definición

namespace banco{

enum EstadoCuenta{

OPERATIVA, INMOVILIZADA, NUM_ROJOS

//OPERATIVA == 0, INMOVILIZADA == 1, NUM_ROJOS == 2

};

};

}

class Cuenta {



private:


EstadoCuenta estado;

Tema 2

Clases y Objetos

19

Enumerados. Uso

En Cuenta.cpp
#include "Cuenta.h"
using namespace banco;

void Cuenta::reintegro(double cantidad){

if (estado!=INMOVILIZADA && puedoSacar(cantidad)){

saldo = saldo - cantidad;

}

}

Para referenciar un valor del enumerado no tiene que ir

precedido por el nombre del enumerado

Tema 2

Clases y Objetos

20

Inicialización de los atributos
No se puede asignar un valor inicial a los

atributos en el momento de la declaración a
menos que sea una constante (const static)
Se considera definición y no declaración

A diferencia de Java, no podemos asegurar

que los atributos tengan un valor inicial

Solución Definición de constructores

Tema 2

Clases y Objetos

21

Constructores

Método especial con el mismo nombre que la clase y

sin valor de retorno (= Java)

Se permite sobrecarga
Si no existe ningún constructor en

la clase el

compilador proporciona el constructor por defecto
class Cuenta {
public:
Cuenta (Persona *titular);
Cuenta (Persona *titular, double saldoInicial);

};

Tema 2

Clases y Objetos

22

Constructores de la clase Cuenta
Cuenta::Cuenta (Persona *persona){
codigo = ++ultimoCodigo;
titular = persona;
saldo = SALDO_MINIMO;
ultimasOperaciones = new double[Cuenta::MAX_OPERACIONES];
numOperaciones = 0;
estado = OPERATIVA;
}
Cuenta::Cuenta (Persona *persona, double saldoInicial){
codigo = ++ultimoCodigo;
titular = persona;
saldo = saldoInicial;
ultimasOperaciones = new double[Cuenta::MAX_OPERACIONES];
numOperaciones = 0;
estado = OPERATIVA;
}
Tema 2

Clases y Objetos

23

Sobrecarga de constructores
A diferencia de Java, this no se puede
utilizar como una función para reutilizar el
código de los constructores

Soluciones:

Utilizar un método privado al que se invoca desde

los constructores

Utilizar argumentos por defecto para los

constructores

Tema 2

Clases y Objetos

24

Reutilización de código en constructores

Cuenta::Cuenta (Persona *persona){
inicializa(persona,SALDO_MINIMO);

}
Cuenta::Cuenta (Persona *persona, double saldoInicial){

inicializa(persona, saldoInicial);

}
void Cuenta::inicializa(Persona *persona, double saldoInicial){

codigo = ++ultimoCodigo;
titular = persona;
saldo = saldoInicial;
ultimasOperaciones = new double[Cuenta::MAX_OPERACIONES];
estado = OPERATIVA;

}

Tema 2

Clases y Objetos

25

Constructores con argumentos por defecto

Un argumento por defecto es una valo
  • Links de descarga
http://lwp-l.com/pdf2095

Comentarios de: Tema 2: Clase y objetos en C++ (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad