C ++
C ++
II SEMESTRE
Carrera de Desarrollo de Software
www.senati.edu.pe
www.senati.edu.pe
Lenguaje C++
Introducción
• B. Stroustrup, mediados de los 80, AT&T
www.senati.edu.pe
Lenguaje C++
Extensiones respecto al C
• No orientadas a objeto
• Orientadas a objetos
www.senati.edu.pe
Lenguaje C++
Extensiones respecto al C
• No orientadas a objeto
• Mejoras en entrada/salida - streams
• Sobrecarga de funciones y operadores
• Parámetros por defecto. Referencias
www.senati.edu.pe
Lenguaje C++
• Organización de programas
• Ficheros de declaraciones (.h)
• Del sistema
• Del usuario (#ifndef .... #define ..... #endif)
• Ficheros de código fuente (.cc, .cpp)
www.senati.edu.pe
Lenguaje C++
• Scope (alcance)
• Fichero: declaraciones que no pertenecen a función o clase
alguna
• Función: etiquetas
• Local: cualquier nombre declarado en un bloque pertenece al
bloque.
• Clase: declaraciones asociadas a una clase
• Cada variable tiene un “scope” o un contexto
www.senati.edu.pe
Lenguaje C++
• Operadores y sentencias
• Sentencias
• Misma sintaxis y semántica que las de C
• Operadores idem sentencias excepto:
• new, delete, delete[], ::
• <<, >>
• Sobrecarga
www.senati.edu.pe
Lenguaje C++
Estructura básica de un programa
#include<iostream.h>
main()
{//inicio
cout << “Hello world”;
}//fin
www.senati.edu.pe
Lenguaje C++
Elementos del programa
• COMENTARIOS
• // Comentario de una sola línea
• /* Comentario multilínea */
• BLOQUES DE CÓDIGO
• { Todos los bloques de código van entre corchetes }
• FIN DE LINEA
• Todas las instrucciones terminan con un punto y coma
www.senati.edu.pe
Lenguaje C++
Tipo básico de datos
• Tipo de dato bool tiene dos valores
asociados true o false
• EJEMPLO:
• int variable1;
• bool variable2=true;
www.senati.edu.pe
Lenguaje C++
Tipo básico de datos
• Variables y aritmética.
• Todo nombre y/o expresión tiene un tipo.
• El tipo determina las operaciones que se pueden
realizar con el.
• Conversiones implícitas.
• En asignaciones y operaciones algebraicas el lenguaje
lleva a cabo todas las conversiones implícitas que
faciliten el uso y sean seguras.
www.senati.edu.pe
Lenguaje C++
Arreglos
• Un arreglo es un conjunto de tipos de datos básicos
DECLARACIÓN DE UN ARREGLO
• <Tipo de dato básico> Nombre_variable[Número de elementos];
INICIALIZACION DE UN ARREGLO
• <Tipo de dato> Nombre_variable = {valor1, valor2, …, valorN}];
EJEMPLO:
• char arreglo1[10];
• float arreglo2={1.5, 2.3, 6,7};
www.senati.edu.pe
Lenguaje C++
Arreglos Multidimencionales
DECLARACIÓN DE UN ARREGLO MULTIDIMENCIONAL
• <Tipo de dato básico> Nombre_variable[Número de
elementos][Numero de elementos];
EJEMPLO:
• char arreglo1[10][10];
• int arreglo2[]={{1,2,3},{4,5,6}{7,8,9}};
www.senati.edu.pe
Lenguaje C++
Apuntadores y vectores
• Punteros y vectores.
char v[10]; //vector de 10 caracteres (0 a 9)
char *p; // puntero a un carácter
p = &v[3]; //p apunta al cuarto elemento de v
www.senati.edu.pe
Lenguaje C++
Operadores
Los operadores de incremento
++ y -- pueden ser explicados
por medio del siguiente
ejemplo. Si tienes la siguiente
secuencia de instrucciones
a = a + 1; b = a;
Se puede puedes usar
b = a++;
b = ++a;
www.senati.edu.pe
Lenguaje C++
Sobrecarga de operadores
+ - * / % ^ & | ~ ! = < > += -= *= /= %= ^=
&=
|= << >> >>= <<= == != <= >= && || ++ --
->* -> , [ ] ( ) new new[ ] delete delete[ ]
No se sobrecargan:
::
.
.*
www.senati.edu.pe
Lenguaje C++
Sobrecarga de operadores
class complex {
double re, im;
public:
complex(double r, double i) : re(r), im(i){}
complex operator+(complex);
complex operator*(complex);
bool operator==(complex);
bool operator<(complex);
};
void f()
{ complex a(1, 3.1);
complex b(1.2, 2);
complex c = b;
if(a==b)
a = b + c;
b = b + c * a;
c = a * b + complex(1,2);
}
www.senati.edu.pe
Lenguaje C++
Funciones
• Regulares (similares a una función C).
• Miembros (asociadas a una clase).
www.senati.edu.pe
Lenguaje C++
Funciones
extern int pow( float, int);
int main()
{
for (int i = 0; i < 10; i++)
cout << pow( 2, 5) << endl;
}
www.senati.edu.pe
Lenguaje C++
Funciones
• Paso de argumentos
• Por valor - seguridad
• copiado en el almacenamiento local de la función
• la función accede a la copia
• Por referencia - velocidad - retornos múltiples
• se copia la dirección del objeto que se esta pasando
• la función accede al objeto
• Por referencia constante - seguridad + velocidad
• Vectores: paso por referencia
www.senati.edu.pe
Lenguaje C++
Funciones
• Paso de argumentos
• Por valor
char a = ‘a’;
miFuncion(a);
• Por referencia
char a = ‘a’;
miFuncion(&a);
• Vectores: paso por referencia
char a[] = {‘a’,’b’}
miFuncion(a);
www.senati.edu.pe
Lenguaje C++
Funciones
• Sobrecarga de nombres.
• int max(int, int);
• int max( int, int, int);
• int max(int *, int);
• int max(float, int);
• int max(int, float);
www.senati.edu.pe
Lenguaje C++
Soporte para abstracción de datos
• Definición de un conjunto de operaciones
asociadas a un tipo.
• Restricción del conjunto de operaciones que se
pueden realizar sobre un tipo a las definidas
para el mismo.
• CLASE
• nombre
• datos miembros
• funciones miembro
• control de acceso
www.senati.edu.pe
Lenguaje C++
Soporte para abstracción de datos
• Inicialización y destrucción.
• Inicialización y asignación.
• Patrones.
• Conversiones de tipo
complex a = complex(1);
• Múltiples implementaciones
www.senati.edu.pe
Lenguaje C++
Soporte para orientacion a objetos
• Funciones virtuales. Polimorfismo.
• Clases abstractas.
• Clases patrón.
• Herencia simple y múltiple.
• Encapsulado.
www.senati.edu.pe
Lenguaje C++
• Los objetos se crean al llegar a su definición.
• Los objetos se destruyen cuando salen del
bloque.
• Los objetos globales se crean una sola vez y se
destruyen al terminar el programa.
• Los objetos static son similares a los globales.
www.senati.edu.pe
Lenguaje C++
• Almacenamiento de objetos
www.senati.edu.pe
Lenguaje C++
Clases.
Tipo abstracto de datos definido por el usuario
Interface e implementación
struct X {
class X {
private:
private:
int i;
int i;
public: public:
f(); f();
protected: protected:
g(); g();
}; };
www.senati.edu.pe
Lenguaje C++
clases
• Constructores
• Funciones con el mismo nombre de la clase pero que no
retornan nada.
• Constructor de copia
• Constructor por defecto
• Constructores como conversores de tipo
• Destructores
• virtuales
www.senati.edu.pe
Lenguaje C++
clases
• CONSTRUCTORES
• class Point {
• int _x, _y;
• public: Point() { _x = _y = 0; }
• void setX(const int val);
• void setY(const int val);
• int getX() { return _x; }
• int getY() { return _y; }
• };
www.senati.edu.pe
Lenguaje C++
clases
• DESTRUCTORES
• class Point {
• int _x, _y;
• public:
• Point() { _x = _y = 0; }
• Point(const int x, const int y) { _x = x; _y = y; }
• ~Point() { /* ¡Nada qué hacer! */ }
• void setX(const int val);
• void setY(const int val);
• int getX() { return _x; }
• int getY() { return _y; }
• };
www.senati.edu.pe
Lenguaje C++
clases
• Friend
• Nosotros podemos definir que funciones o clases sean amigos de una clase para permitirles
acceso directo a sus miembros de datos privados. Por ejemplo, que la función para el
operador + tuviese acceso a los miembros de datos privados _real e _imag de la clase
Complex. Con ese fin declaramos que el operador + sea amigo de la clase Complex:
• class Complex {
• ... public: ...
• friend Complex operator +( const Complex &, const Complex & );
• };
www.senati.edu.pe
Lenguaje C++
clases y herencia
• class Point3D : public Point {
• int _z;
• public:
• Point3D() { setX(0); setY(0); _z = 0; }
• Point3D(const int x, const int y, const int z) {
setX(x); setY(y); _z = z; }
• ~Point3D() { /* Nada que hacer */ }
• int getZ() { return _z; }
• void setZ(const int val) { _z = val; }
• };
www.senati.edu.pe
Lenguaje C++
clases y herencia múltiple
• class DrawableString : public Point,
public DrawableObject {
• ... public:
• DrawableString(...){ ... }
• ~DrawableString() { ... } ...
• };
www.senati.edu.pe