Anda di halaman 1dari 46

El lenguaje C++

A partir del lenguaje C


Entorno de programacin
Visual C++
El entorno de
programacin
Solucin
Proyecto
Hola mundo
Compilar
Build
Link
Debug
Nuevas palabras
reservadas
asm operator
inline this
public delete
virtual private
catch throw
new friend
template protected
class try
Nueva forma para E/S
Cualquier compilador de C++, acepta C.
La biblioteca iostream incluye los
operadores cin y cout (#include
<iostream>).
Ejemplo:
char nombre;
int num=2;
std :: cout << "Introduzca el nombre del archivo " << num << ": ";
std :: cin >> nombre;
Declaracin de variables
En cualquier lugar del bloque:
for (double suma = 0.0, int i = 0; i<n; i++)
suma += a[i]
Variables const para tamao de
vectores:
int main() {
const int SIZE = 5;
char cs[SIZE] ;
}
Punteros const
Apuntan siempre a la misma direccin.
El valor de la variable apuntada se
puede modificar.
Se declaran as:
char* const nombre2 = "Ramn";
Un puntero a variable const no puede
modificar el valor de esa variable.
Punteros a variables const
Se declaran as:
const char *nombre1 = "Ramn";
El cdigo: #include <stdio.h>
int main() {
const int i = 2;
En ANSI C
int *p;
produce i = 3, p = &i;
pero en C++ no *p = 3;
compila. printf("i = %d", i);
}
Conversiones explcitas de
tipo
Ejemplo de cast: (C y C++)
return (int) (x/y);

C++ dispone de otra conversin:


y = double(25);
return int(x/y);
Sobrecarga de funciones
Funciones distintas con mismo
nombre.
Distinto tipo y/o nmero de
argumentos.
No pueden diferir slo en el tipo de
retorno.
Tampoco en que un argumento se
pase por valor en una funcin y por
referencia en la otra.
Parmetros con valores
por defecto
En C++ se pueden definir valores por
defecto para todos o algunos argumentos
formales.
En la llamada, si no estn los argumentos
correspondientes, se toma el valor asignado.
Los argumentos con valores por defecto
deben estar al final de la lista.
Parmetros con valores
por defecto
Si se omite un argumento en la
llamada, se deben omitir los
siguientes en la lista.
Ejemplo:
double modulo(double x[], int n=3);
En C++ se puede invocar as:
v = modulo(x, n);
v = modulo(x);
Variables de tipo
referencia
Se declaran con el operador '&'.
Deben ser inicializadas.
Nombre alternativo para un objeto.
Utilidades ms importantes:
especificacin de argumentos.
especificacin de tipos de retorno.
sobrecarga de operadores.
Variables de tipo
referencia
int i = 1;
int& r = i; // r e i ahora se refieren al // mismo int
int x = r; // x = 1
r = 2; // i = 2
r++; // i se incrementa a 3
Ningn operador opera sobre una
referencia.
El valor de una referencia no se puede
modificar (siempre se referir al mismo objeto).
&r es un apuntador al objeto denotado.
Los operadores new y
delete
Hasta ahora variables estticas o
automticas.
Con new y delete se crean y destruyen
variables segn la necesidad del
programador.
Una variable puede traspasar su bloque.
Se puede crear cualquier tipo de variable con
new y ste retorna un puntero de ese tipo.
No se necesita conversin de tipo.
Clases, objetos y mtodos
Las clases se pueden ver como una
generalizacin de las estructuras.
Son verdaderos tipos de datos
definidos por el usuario.
Los objetos son las variables de una
determinada clase.
Los mtodos pueden ser funciones u
operadores.
Estructura de un programa
En los archivos de cabecera (.h),
por lo general, se declara la clase,
con los prototipos de las funciones.
En un archivo NombreClase.cpp de
implementan los constructores,
funciones y operadores.
En un archivo main.cpp se define la
funcin main.
Ejemplo: complejo.h
Se declaran los campos miembro
privados:
class Complejo
{
private:
double real;
double imag;
Los usuarios de la clase no podrn
acceder con los operadores '.' y '->'.
Las funciones miembro s tienen acceso.
Ejemplo: complejo.h
Se declaran un conjunto de funciones
y operadores miembro en la seccin
pblica.
Las tres primeras son los
constructores:
public:
// Constructores
Complejo();
Complejo(double, double im=0.0);
Complejo(const Complejo&);
Ejemplo: complejo.h
El siguiente grupo de funciones
permite dar valor a los campos:
void setData();
void setReal(double);
O acceder a ellos:
double getReal(){return real;}
double getImag(){return imag;}
Ejemplo: complejo.h
A continuacin se declara la sobrecarga
de los operadores aritmticos,
comparacin y asignacin (operadores
miembro).
Complejo operator+ (const Complejo&);
Y luego la sobrecarga del operador de
insercin en el flujo de salida (operador
amigo)
friend ostream& operator<< (ostream& const Complejo&);
Sobrecarga de operadores
// operador miembro + sobrecargado
Complejo Complejo::operator+ (const Complejo
&a)
{
Complejo suma;
suma.real = real + a.real;
suma.imag = imag + a.imag;
return suma;
}
Sobrecarga de operadores
Los operadores y funciones miembro se
indican con el operador de resolucin de
alcance '::' (no as los amigos).
En una sentencia x + y; // x, y complejos
se utiliza el operador sobrecargado.
x es el argumento implcito.
y se pasa explcitamente (como argumento
formal a) .
Puntero this
La sobrecarga de '=' retorna (*this)
que representa al argumento implcito.
Es una variable predefinida para todas
las funciones (u operadores) miembro.
Contiene la direccin del objeto
correspondiente.
Forma de referirse al objeto como tal
(argumento implcito).
Constructores
Se debe dar valor inicial a las variables
miembro. Esto se hace a travs de
constructores.
Se invocan automticamente al crear
un objeto de una clase.
Permiten la encapsulacin.
Tienen el mismo nombre que la clase.
No tienen valor de retorno (ni siquiera
void).
Inicializadores
Los constructores inicializan variables.
C++ permite inicializar variables
fuera del cuerpo de una funcin.
C_Cuenta::C_Cuenta(double unSaldo, double unInteres):
Saldo(unSaldo), Interes(unInteres) // inicializadores
{ } // En este caso el cuerpo del constructor est vaco

Permiten definir variables miembro


const.
Constructor por defecto
Es un constructor que no necesita que se
le pasen argumentos para inicializar las
variables. Hay dos opciones:
No tiene argumentos.
Tiene argumentos, pero todos ellos tienen
asignado un valor por defecto en la
declaracin.
Es necesario para declaraciones de la
forma
Complejo z; y Complejo datos[100];
Constructor de oficio
Lo crea el compilador de C++ si el
programador no define ningn
constructor.
No tiene argumentos, es un
constructor por defecto (no siempre
un constructor por defecto es un
constructor de oficio).
Suelen ser cmodos, correctos y
suficientes.
Constructor de copia
Se utiliza cuando se debe crear un
objeto a partir otro objeto de la misma
clase.
Tiene un nico argumento que es una
referencia constante a un objeto de la
clase.
El compilador tambin define un
constructor de copia de oficio si el
programador no lo hace (no funciona
correctamente con punteros).
Constructores y operador
de asignacin (=).
z2 = z1;
Complejo z2 = z1;
Se supone que c1 y
Se invoca al
c2 existan
constructor de copia. previamente.
El constructor de Se utiliza el operador
copia por defecto es de asignacin que
una copia bit a bit. funciona como un
Se debe sobrecargar. constructor de copia.
Se debe sobrecargar
'='.
Destructores
Es llamado cuando el objeto va a
dejar de existir.
Para un objeto local o automtico
definido en un bloque, el destructor
es invocado cuando el programa
llega al final del bloque.
Los objetos creados con new deben
ser explcitamente destruidos.
Clases y funciones friend
Las funciones miembro (que acceden a
las variables miembro) slo pueden ser
miembro de una nica clase.
Una funcin friend de una clase es una
funcin que no pertenece a la clase,
pero que tiene permiso para acceder a
sus funciones y variables miembro.
Una clase friend de otra tiene todas sus
funciones amigas de esa segunda clase.
Herencia
class ClaseDerivada: public o private ClaseBase
Un nombre redefinido oculta el nombre
heredado.
Hay algunos elementos de la clase base que
no pueden ser heredados:
Constructores
Destructores
Funciones friend
Funciones y datos estticos de la clase
Operador de asignacin (=) sobrecargado
Constructores de clases
derivadas
Debe llamar al constructor de la clase
base.
Se debe especificar un inicializador
base.
Se puede omitir si la clase base cuenta
con un constructor por defecto.

C_CuentaJoven(const char *unNombre, int laEdad,


double unSaldo=0.0, double unInteres=0.0):
C_Cuenta(unNombre, unSaldo, unInteres)
Herencia mltiple
Una clase puede heredar de una
(herencia simple) o ms clases
base (herencia mltiple).

class CuentaEmpresarial:
public Cuenta, public Empresa
Polimorfismo
Funciones Virtuales
Son funciones distintas con el mismo
nombre, declaradas virtual en la
clase base (ligadura dinmica).
Funciones convencionales se invocan
de acuerdo al tipo del objeto (en
tiempo de compilacin).
Con funciones virtuales se resuelve
en tiempo de ejecucin el problema
de la asignacin.
Funciones virtuales
class A {
A objA;
public:
B objB;
virtual void mostrar();
}
A* ptrA1;
A* ptrA2;
class B: public A {
public:
ptrA1 = &objA;
void mostrar();
ptrA2 = &objB;
}

ptrA2->mostrar();
Funciones virtuales puras
La funcin virtual de la clase base debe
declararse a pesar de no ser utilizada.
En este caso no es necesario definirla.
Se declara como funcin virtual pura:
virtual funcion1() const = 0;
No se pueden definir objetos de esa clase.
Se pueden definir punteros a esa clase.
Clases abstractas
Contienen una o ms funciones virtuales
puras.
Si una clase derivada no define una
funcin virtual pura, la hereda como
pura y por lo tanto tambin es
abstracta.
Una clase que define todas las funciones
virtuales es una clase concreta.
Entrada/Salida
Stream o flujo: dispositivo que produce o
consume informacin.
Flujos estndares:
cin: entrada estndar (teclado).
cout: salida estndar (pantalla).
cerr: salida de mensajes de error (pantalla).
Las clases istream, ostream e
iostream son clases que heredan de ios.
Manipuladores
Variables y/o mtodos miembro que
controlan el formato.
Pueden tener argumentos (iomanip)
o no (iostream).
Slo afectan al flujo al que se aplican.
No guardan la configuracin anterior
(como s lo hacen los indicadores).
Manipuladores
Ejemplos:
endl: se imprime un \n y se vaca el buffer de
salida.
flush: se vaca el buffer de salida.
setw(int w): establece la anchura mnima de
campo.
cout << hex << 100;
cout << setw(10) << mat[i][j] << endl;

El efecto permanece hasta que se


cambia por otro manipulador.
E/S de archivos
En la biblioteca fstream se definen
las clases ifstream, ofstream y
fstream, que derivan de istream y
ostream y a su vez de la clase ios.
Ejemplos:
fstream archivo;
archivo.open("datos.dat", ios::in);

ifstream archivo("datos.dat");
Excepciones
Parte del cdigo puede no ejecutarse
por algn error inesperado.
Si ocurre una excepcin se
interrumpe la normal ejecucin del
cdigo.
Se pueden manejar realizando una
accin adecuada para dejar al
sistema en un estado estable.
Excepciones en C++
Se separa el cdigo para el caso en
que ocurre una situacin excepcional
y el que no:
try: identifica un bloque de cdigo en el
cual puede surgir una excepcin.
throw: causa que se origine una
excepcin.
catch: identifica el bloque de cdigo en
el cual la excepcin se maneja.
Excepciones en C++
int main(void) {
int counts[] = {34, 54, 0, 27, 0, 10, 0};
int time = 60; // One hour in minutes

for(int i = 0 ; i < sizeof counts /sizeof counts[0] ; i++)


try {
cout << endl << "Hour " << i+1;
if(counts[i] == 0)
throw "Zero count - calculation not possible.";

cout << " minutes per item: "


<< static_cast<double>(time)/counts[i];
} catch(const char aMessage[]) {
cout << endl << aMessage << endl;
}
return 0;
}
Excepciones en C++
Cuando la excepcin es lanzada
(throw) la secuencia de ejecucin
contina con el bloque catch.
Despus de ejecutarse el cdigo del
bloque catch la ejecucin contina
con la siguiente iteracin del for.
El compilador considera los bloques
try y catch como una nica unidad.

Anda mungkin juga menyukai