Sie sind auf Seite 1von 41

n C++

Lenguaje de programacio
sicas 2
Herramientas Ba
n Intensivo en Co
mputo de Alto Desempen
o
1er Plan de Capacitacio

Luis Miguel de la Cruz Salas


ccad 1@googlegroups.com, luiggix@gmail.com
Grupo de Geofsica Matem
atica y Computacional
www.mmc.geofisica.unam.mx/
Depto. de Recursos Naturales
Instituto de Geofsica UNAM.

Enero de 2014

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

1 / 37

Contenido

const, macros, enum, punteros, referencias, string

Arreglos

Ejercicios 2.

Estructuras

Funciones

Espacios de nombres

Excepciones

Bibliografa

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

2 / 37

const, macros, enum, punteros, referencias, string

Contenido

const, macros, enum, punteros, referencias, string

Arreglos

Ejercicios 2.

Estructuras

Funciones

Espacios de nombres

Excepciones

Bibliografa

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

3 / 37

const, macros, enum, punteros, referencias, string

Constantes, macros, enum. Archivo : ejem10.cpp


La palabra const permite construir variables que no van a cambiar
durante todo el programa. Es ilegal redefinir una variable constante,
por lo que se debe inicializar cuando se declara.
const double PI = 3 . 1 4 1 5 9 2 ; // double const PI = 3.14...
const double 2 PI = 2 PI ;

Las macros se heredan de C


# define P I 3 . 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 5
# define SQ( x ) ( ( X ) ( X ) )

Las enumeraciones son tipos que pueden mantener un conjunto de


valores definidos por el usuario.
Una vez definida se puede usar como un entero.
enum keyword { ASM , AUTO , BREAK } ; // {0 , 1 , 2}
enum flag { x =1 , y =2 , z =4 , e =8}; // rango 0:15 (0:2^4 -1)

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

4 / 37

const, macros, enum, punteros, referencias, string

Punteros
Archivo : ejem11 1.cpp
MEMORIA
Nombre

Contenido

Direccion
0x012312

int i = 5 , p ;
p 0x90113

C++

Plan en CCAD, GGMC-IGEF

0x352090

c 2015
LM de la Cruz

5 / 37

const, macros, enum, punteros, referencias, string

Punteros
Archivo : ejem11 1.cpp
MEMORIA
Nombre

*pi i

int i = 5 , p ;
int pi = &i ;

Contenido

pi 0x012312 0x179018

p 0x90113

C++

Plan en CCAD, GGMC-IGEF

Direccion
0x012312

0x352090

c 2015
LM de la Cruz

5 / 37

const, macros, enum, punteros, referencias, string

Punteros
Archivo : ejem11 1.cpp
MEMORIA
Nombre

Contenido

*pi i

int i = 5 , p ;
int pi = &i ;
int j = pi ;

pi 0x012312 0x179018
j

p 0x90113

C++

Plan en CCAD, GGMC-IGEF

Direccion
0x012312

0x235312
0x352090

c 2015
LM de la Cruz

5 / 37

const, macros, enum, punteros, referencias, string

Punteros
Archivo : ejem11 1.cpp
MEMORIA
Nombre

int i =
int pi
int j =
double

5 , p ;
= &i ;
pi ;
d = &j ; // Intenta ...

C++

Plan en CCAD, GGMC-IGEF

Contenido

*pi i

Direccion
0x012312

pi 0x012312 0x179018
j

0x235312

p 0x90113

0x352090

0x561294

c 2015
LM de la Cruz

5 / 37

const, macros, enum, punteros, referencias, string

Punteros
Archivo : ejem11 1.cpp
MEMORIA
Nombre

int i =
int pi
int j =
double

5 , p ;
= &i ;
pi ;
d = &j ; // ERROR !

Contenido

*pi i

Direccion
0x012312

pi 0x012312 0x179018
j

0x235312

p 0x90113 0x352090
ERROR!
d
?
0x561294

Una variable de tipo T* mantiene la direcci


on en memoria de un objeto de tipo T.
T puede ser cualquier tipo b
asico, compuesto o definido por el usuario (int, double,
string, etc.)
Si v es un objeto, entonces &v regresa su direcci
on en memoria
Si p es un puntero, entonces *p regresa el contenido del objeto al que apunta p.

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

5 / 37

const, macros, enum, punteros, referencias, string

Punteros

tica
Aritme
int p ;
++p ;
p ;
p += 5 ;
p = 5 ;

const
const int p ; // se hace constante el objeto al que se apunta
int const p ; // se hace constante el puntero .
const int const p ; // ambos constantes

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

6 / 37

const, macros, enum, punteros, referencias, string

Referencias

Una referencia es un sin


onimo de una variable
Una referencia debe ser inicializada.
No puede cambiar para referir a otro objeto.
Su principal uso es en el paso de argumentos a funciones y valores de
regreso
Archivo : ejem11 2.cpp
int i = 5 ;
int& r = i ;
int x = r ;
r = 2;

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

7 / 37

const, macros, enum, punteros, referencias, string

Cadenas

La biblioteca estandar <string> provee el tipo string para el manejo


de cadenas.
Archivo : ejem11 3.cpp
string s1 = " Hello , " , s2 = " World ! " ;
string s = s1 + s2 ;
cout << s ;

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

8 / 37

Arreglos

Contenido

const, macros, enum, punteros, referencias, string

Arreglos

Ejercicios 2.

Estructuras

Funciones

Espacios de nombres

Excepciones

Bibliografa

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

9 / 37

Arreglos

ticos
Arreglos esta
Archivo : ejem12 1.cpp
Un arreglo estatico es un conjunto de variables del mismo tipo,
almacenadas en memoria en forma secuencial.
MEMORIA

int a [ 3 ] = { 3 , 6 , 9 } ;
int suma = 0 ;
// El siguiente for - loop
// requiere la opcion
// - std = c ++0 x para compilar
for ( int elem : a )
suma += elem ;

Nombre Contenido Direccion


0x012310
3
*a a[0]
0x012314
a[1]
6
a[2]
0x012318
9

suma

18

0x634344

Para acceder a los elementos del arreglo se usa el operador [ ].


Los arreglos empiezan en 0 y terminan en N-1, donde N es el tama
no
del arreglo.
*a es un sinonimo de a[0].
a apunta al principio del arreglo: a = &a[0] = &a = 0x012310.
C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

10 / 37

Arreglos

micos
Variables y arreglos dina
operadores new y delete : Archivo ejem12 2.cpp
double d ;
d = new double ;
d = 4 5 . 3 ;
delete d ;
d = new double ( 3 . 1 4 1 5 9 2 ) ;
delete d ;
d = new double [ 3 ] ;
d [0] = 44.56;
d [1] = d [0] + 5.67;
delete [ ] d ;

MEMORIA
Nombre

Contenido Direccion
d 0x053328 0x012310

*d

45.3

0x053328

int n ;
cin >> n ;
d = new double [ n ] ;
// ...
delete [ ] d ;
d = 0 ; // d = NULL ;

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

11 / 37

Arreglos

Arreglos multidimensionales
Archivo : ejem12 3.cpp
a[2][4] = { 0, 1,

2, 3,
4, 5,
6, 7};

float a [ 2 ] [ 4 ] = { 0 , 1 ,
2 ,3 ,
4 ,5 ,
6 ,7};
// Recorrido por renglon ij
for ( int i = 0 ; i < N ; i++)
for ( int j = 0 ; j < N ; j++)
a[i][j] = i j
// Recorrido por columna ji
for ( int j = 0 ; j < N ; j++)
for ( int i = 0 ; i < N ; i++)
a[i][j] = i j;

C++

Plan en CCAD, GGMC-IGEF

MEMORIA
Nombre
a[0][0]
a[1][0]
a[0][1]
a[1][1]
a[0][2]
a[1][2]
a[0][3]
a[1][3]

Contenido
0
1
2
3
4
5
6
7

c 2015
LM de la Cruz

Direccion
0x012310
0x012314
0x012318
0x012322
0x012326
0x012330
0x012334
0x012338
0x012342

12 / 37

Arreglos

micos
Arreglos multidimensionales dina
Archivo : ejem12 4.cpp
int N , rep ;
cout << " Tama ~ no = " ;
cin >> N ;
double a ;
a = new double [ N ] ;
for ( int i = 0 ; i < N ; i++)
a [ i ] = double [ N ] ;
// Recorrido por renglon ij
for ( int i = 0 ; i < N ; i++)
for ( int j = 0 ; j < N ; j++)
a[i][j] = i j;
// Recorrido por columna ji
for ( int j = 0 ; j < N ; j++)
for ( int i = 0 ; i < N ; i++)
a[i][j] = i j;

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

13 / 37

Ejercicios 2.

Contenido

const, macros, enum, punteros, referencias, string

Arreglos

Ejercicios 2.

Estructuras

Funciones

Espacios de nombres

Excepciones

Bibliografa

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

14 / 37

Ejercicios 2.

Ejercicios 2.

Ejercicios 2.
Completar el diagrama de la memoria describiendo lo que sucede en
cada instruccion para el caso del ejemplo 14. Realizar un diagrama
por cada instruccion.
Describir diagrama de la memoria explicando lo que sucede en cada
instruccion para el caso del ejemplo 15. Realizar un diagrama por
cada instruccion.
Explique como hara un arreglo de tama
no N que comience en k y
termine en N+k-1?. (Hint: punteros y su aritmetica).

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

15 / 37

Estructuras

Contenido

const, macros, enum, punteros, referencias, string

Arreglos

Ejercicios 2.

Estructuras

Funciones

Espacios de nombres

Excepciones

Bibliografa

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

16 / 37

Estructuras

Estructuras
Un estructura combina variables de distintos tipos en un solo nombre.
Archivo : ejem13 1.cpp
point c [ 5 ] ;
for ( int i = 0 ; i < 5 ; ++i ) {
c [ i ] . nombre = to_string ( i ) ;
c [ i ] . x = ( i+1) rand ( ) % 1 0 0 ;
c [ i ] . y = ( i+1) rand ( ) % 1 0 ;
}

struct point
{
string nombre ;
float x , y ;
} punto0 ;
int main ( ) {
punto0 . nombre = " punto cero " ;
punto0 . x = 3 . 1 4 1 5 9 2 ;
punto0 . y = 1 2 3 1 2 3 ;
point pt1 ;
pt1 . nombre = " pt1 " ;
pt1 . x = 0 . 5 ;
pt1 . y = 1 . 0 ;

C++

Plan en CCAD, GGMC-IGEF

point pp , pq ;
pp = &pt1 ;
pq = new point ;
pq>nombre = " puntero a punto " ;
pq>x = 3 0 0 0 ;
pq>y = 1 0 0 0 0 ;
return 0 ;
}

c 2015
LM de la Cruz

17 / 37

Estructuras

Estructuras
Una estructura tiene tres niveles de acceso:
P
ublico: public (por omisin)
Protegido: protected
Privado: private

Una estructura puede contener funciones:


Archivo : ejem13 2.cpp
struct point {
char nombre ;
float x , y ;
float distancia ( ) ;
};
point pt1 ;
pt1 . nombre = p ;
pt1 . x = 0 . 5 ;
pt1 . y = 1 . 0 ;
float distancia = pt1 . distancia ( ) ;

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

18 / 37

Funciones

Contenido

const, macros, enum, punteros, referencias, string

Arreglos

Ejercicios 2.

Estructuras

Funciones

Espacios de nombres

Excepciones

Bibliografa

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

19 / 37

Funciones

Funciones
Una funcion es un procedimiento que puede recibir argumentos,
realizar acciones sobre ellos y regresar alg
un resultado.
Re-uso, Facilidad de mantenimiento, Reducci
on de errores.

Ejemplo
# include <iostream>
using namespace std ;
// declaracion ( firma )
int square ( int ) ;
int main ( ) {
cout << " 5 al cuadrado = "
<< square ( 5 ) << endl ;
}
// definicion ( impleme ntacion )
int square ( int x ) {
return x x ;
}

C++

Plan en CCAD, GGMC-IGEF

regreso nombre(argumentos);
regreso: tipo del valor de
regreso de la funcion (void,
int, float, . . . , TDAs).
nombre: definido por el usuario.
argumentos: lista de
argumentos que recibe la
funci
on, definido por el usuario.
(void, int, float, . . . , TDAs)
c 2015
LM de la Cruz

20 / 37

Funciones

Funciones
Los tipos de las entradas y la salidas se deben especificar.
Si una funcion no regresa ning
un valor se debe usar void.
La omision de argumentos significa que la funci
on no recibe entradas.
Los argumentos son valores que se pasan a las funciones:
Argumento formal : es el nombre de un objeto que es
reemplazado por un valor (argumento actual) cuando la
funcion se ejecuta.
Argumento actual : valor, expresi
on o referencia que se pasa a
una funci
on cuando es llamada y que reemplaza a los
argumentos formales.
void funcion ( int a , double b ) ; // Argumentos formales a y b
funcion ( 5 , 3 . 1 4 1 6 ) ; // Argumentos actuales .

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

21 / 37

Funciones

n y sobrecarga
Funciones: args. por omisio
En ocasiones, algunos argumentos no cambiaran entre las llamadas de
una funcion. En estos casos es conveniente usar valores por omision.
void func ( int x , int y , int z =3 , int w =2);
int a , b , c , d ;
func ( a , b ) ; // x =a , y =b , z =3 , w =2
func ( a , b , c ) ;
func ( a , b , c , d ) ;

Cuando una funcion realiza la misma operaci


on para diferentes tipos
de datos es conveniente usar el mismo nombre para dicha funcion:
void
void
void
void

print ( int , int ) ;


print ( int ) ;
print ( const char ) ;
print ( Matriz ) ;

Para resolver la llamada se utiliza el n


umero y tipo de argumentos.
Dos funciones no pueden diferir solo en el valor de regreso.
C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

22 / 37

Funciones

ticas
Funciones: recursividad, inline, var. esta

Funciones recursivas:
long factorial ( long a ) {
if ( a > 1 )
return a factorial ( a 1) ;
else
return 1 ;
}

Funciones en lnea: inline funcion(int, double, ...);


Variables estaticas:
Se usa un objeto estatico para representar la variable en todas las
llamadas a la funci
on.
Se inicializa en la primera llamada.

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

23 / 37

Funciones

Archivos y flujos
La biblioteca <fstream> provee funciones para manipular archivos de
entrada y salida: ifstream, para archivos de entrada; ofstream,
para archivos de salida
Un archivo se puede abrir para lectura (in), escritura (out), en modo
binario (binary), etc.
Archivo : ejem15 1.cpp
ifstream infile ( " data " , ios_base : : in ) ;
ofstream outfile ( " output " , ios_base : : out ) ;

La biblioteca estandar <sstream> contiene dos tipos:


istringstream, para manejar flujos de cadenas de entrada;
ostringstream, para manejar flujos de cadenas de salida.
Archivo : ejem15 2.cpp

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

24 / 37

Espacios de nombres

Contenido

const, macros, enum, punteros, referencias, string

Arreglos

Ejercicios 2.

Estructuras

Funciones

Espacios de nombres

Excepciones

Bibliografa

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

25 / 37

Espacios de nombres

Espacios de nombres
Un espacio de nombres, namespace, es un mecanismo para agrupar
estructuras de datos, funciones y otros espacios de nombres.
Si un conjunto de declaraciones estan relacionadas bajo un cierto
criterio, entonces, ellas pueden ponerse en un espacio de nombres
comn para expresar este hecho.
El objetivo es evitar conflictos de nombres y expresar una estructura
logica dentro del programa.
n y definicio
n de los espacios de nombres
Declaracio
namespace Vec {
class Vector ;
double onenorm ( Vector & );
double twonorm ( Vector & );
double maxnorm ( Vector & );
}
double Vec : : onenorm ( Vector& v )
{ // ... }

C++

Plan en CCAD, GGMC-IGEF

namespace Mat {
class Matrix ;
double onenorm ( Matrix & );
double twonorm ( Matrix & );
double maxnorm ( Matrix & );
double frobnorm ( Matrix & );
}
double Mat : : onenorm ( Matrix& m )
{ // ... }
c 2015
LM de la Cruz

26 / 37

Espacios de nombres

Espacios de nombres

Uso de los espacios de nombres


using namespace Vec ;
using Mat : : twonorm ;
int main ( )
{
Matrix A ;
Vector x ;

int main ( ) {
Matrix A ;
Vector x ;
Mat : : onenorm ( A ) ;
Vec : : onenorm ( x ) ;

Mat : : onenorm ( A ) ;
twonorm ( A ) ;
onenorm ( x ) ;

return 0 ;
}

return 0 ;
}

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

27 / 37

Espacios de nombres

Espacios de nombres

digos
Mezcla de dos co
// Archivo pepe . hpp
namespace Pepe {
char f ( char ) ;
int f ( int ) ;
class Cadena { . . . } ;
}
// Archivo maria . hpp
namespace Maria {
char f ( char ) ;
double f ( double ) ;
class Cadena { . . . } ;
}

C++

Plan en CCAD, GGMC-IGEF

# include " pepe . hpp "


# include " maria . hpp "
int main ( )
{
Pepe : : f ( a ) ;
Pepe : : Cadena h=" Hola Mundo " ;
Tu : : f ( 3 . 1 4 1 5 9 2 ) ;
Tu : : f ( b ) ;
return 0 ;
}

c 2015
LM de la Cruz

28 / 37

Espacios de nombres

Espacios de nombres

n de espacios de nombres
Combinacio
namespace Uno {
class String { . . . } ;
String operator +(cons String ,
char ) ;
void fill ( char ) ;
}
namespace Dos {
class Vector { . . . }
}

namespace Tres {
using namespace Uno ;
using namespace Dos ;
void fct ( String & );
}
void f ( ) {
Tres : : String s = " Hola " ;
Tres : : Vector v ;
}

Los espacios de nombres son abiertos


namespace A { int f ( ) ; } // A contiene f ()
namespace A { int g ( ) ; } // Ahora A contiene a f () y g ()

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

29 / 37

Espacios de nombres

Espacios de nombres

Se pueden usar alias


namespace O b j e c t _ O r i e n t e d _ L i b r a r y {
void funcion ( ) ;
}
namespace OOLG = O b j e c t _ O r i e n t e d _ L i b r a r y ;
OOLG : : funcion ( ) ;

Archivo : ejem16.cpp

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

30 / 37

Excepciones

Contenido

const, macros, enum, punteros, referencias, string

Arreglos

Ejercicios 2.

Estructuras

Funciones

Espacios de nombres

Excepciones

Bibliografa

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

31 / 37

Excepciones

Excepciones

Una excepcion se define mediante un objeto de una clase que


representa una ocurrencia excepcional.
El palabra throw es usada para reportar una condicion de excepcion,
mientras que catch es usada para manejarla.
La parte de codigo que detecta un error puede lanzar una excepcion.
Archivo : ejem17.cpp

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

32 / 37

Bibliografa

Contenido

const, macros, enum, punteros, referencias, string

Arreglos

Ejercicios 2.

Estructuras

Funciones

Espacios de nombres

Excepciones

Bibliografa

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

33 / 37

Bibliografa

Bibliografa I

Bjarne Stroustrup.
A Tour of C++
AddisonWesley, 2013.
Bjarne Stroustrup.
Programming, Principles and Practices
AddisonWesley, Second Edition, 2014.
Bjarne Stroustrup.
The C++ Programming Language
AddisonWesley, Fourth Edition, 2013.
Scott Meyers.
Effective C++
AddisonWesley, Third Edition, 2005.

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

34 / 37

Bibliografa

Bibliografa II
Scott Meyers.
Effective Modern C++
OReilly, 2014.
Scott Meyers.
More Effective C++
AddisonWesley, 1996.
Scott Meyers.
Effective STL
AddisonWesley, 2001.
Scott Meyers info.
www.aristeia.com.
D. Yang.
C++ and Object-Oriented Numeric Computing.
Springer-Verlag, 2001.
C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

35 / 37

Bibliografa

Bibliografa III
G.E. Karniadis and R.M. Kirby.
Parallel Scientific Computing in C++ and MPI .
Cambridge University Press, 2003.
J. Barton and L.R. Nackman,
Scientific and Engineering C++: An Introduction with Advanced
Techniques and Examples,
Addison-Wesley Professional, 1994.
N. M. Josuttis.
The C++ Standard Library: A Tutorial and Reference.
AddisonWesley, 1999.
M. H. Austern.
Generic Programming and the STL: Using and Extending the C++
Standard Template Library.
AddisonWesley, 1999.
C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

36 / 37

Bibliografa

Bibliografa IV

D. R. Musser, G. J. Derge, and A. Saini.


STL Tutorial and Reference Guide.
AddisonWesley, 2001.
D. Vandevoorde and N. M. Josuttis.
C++ Templates.
AddisonWesley, 2003.

C++

Plan en CCAD, GGMC-IGEF

c 2015
LM de la Cruz

37 / 37

Das könnte Ihnen auch gefallen