You are on page 1of 128

Lenguaje C++

Historia y definiciones
Tipos de datos utilizados
Arreglos y estructuras
Funciones
F
i
Libreras en C

Lenguaje C
Historia
El C++ nace en 1983 de un proyecto para incorporar el paradigma
de programacin orientado a objetos al lenguaje C. Su creador fu
Bjarne
j
Stroustrup
pq
que desde 1979 inicia este trabajo
j como su tesis
doctoral.
La idea fue el crear un lenguaje de propsito
general que facilitara la programacin y la
realizacin de muchas de las tareas
anteriormente
reservadas
al
lenguaje
ensamblador como el C,
C pero que incorporase
el paradigma de programacin orientado a
objetos.

Lenguaje C++
Evolucin

1983: nace el C++ incorporando el paradigma de programacin


orientado
d a objetos
b
all lenguaje
l
C (Bjarne
(
Stroustrup).
S
)
1985: Stroustrup crea su primer libro de C++ titulado "The C++
Programming Language.
1998: surge el primer estndar internacional para C++ (C++
ISO/IEC 14882:1998) conocido como C++98.
2011: se culmin el estndar ms reciente denominado C++11 que
tuvo gran influencia de la biblioteca Boost.

Lenguaje C++
Qu es C++?
C++ es un lenguaje de programacin de Alto
Nivel, que incorpora funcionalidad de lenguajes
de bajo nivel
e co
como
o e
el e
ensamblador
sa b ado y C (de nivel
e
intermedio).

Qu es un lenguaje de programacin?
Un lenguaje de programacin es el conjunto de smbolos y palabras y
reglas que permiten al usuario de una computadora darle
instrucciones y rdenes para que esta los ejecute.
ejecute

Lenguaje C++
Clasificacin de los lenguajes de programacin
Los lenguajes de programacin se pueden clasificar segn varios
criterios:
Nivel de abstraccin

Lugar de ejecucin

Propsito

Concurrencia

Evolucin
histrica

Interactividad

Manera de ejecutarse

Realizacin visual

Manera de abordar la tarea a realizar Determinismo


Paradigma de programacin

Productividad

Sistema de tipos

Estandarizacin

Lenguaje C++
Clasificacin de los lenguajes de programacin
Criterio 1: Nivel de Abstraccin: indica el parecido entre el
lenguaje de programacin y el lenguaje natural (manejado por los
humanos).
u a os) Mientras
e t as mayor
ayo sea e
el nivel
e de abst
abstraccin
acc mayor
ayo es e
el
parecido del lenguaje de programacin con el natural.

Ej.

BAJO NIVEL

NIVEL MEDIO

ALTO NIVEL

La programacin
se realiza
teniendo muy en
cuenta
t llas
caractersticas
del hardware.

Permiten un
mayor grado de
abstraccin pero
se mantienen
algunas
cualidades de los
l
lenguajes
j de
d
bajo nivel

Manejan datos
de una manera
cercana al
pensamiento
humano
ignorando del
funcionamiento
de la mquina

Ensamblador

Java, fortran,C++

Lenguaje C++
Clasificacin de los lenguajes de programacin
Criterio 2: Manera de Ejecutarse
INTERPRETADOS

COMPILADOS

MIXTOS

El compilador traduce el Se compilan a un


El intrprete traduce
cdigo fuente (programa lenguaje rpido
una instruccin y la
escrito en un lenguaje) en
de ejecutar y
ejecuta, luego
cdigo mquina (cdigo
luego se
contina con la
objeto). Luego el
interpretan.
prxima de la misma
enlazador unir los
manera hasta
Java, C#
terminar el programa. ficheros de cdigo objeto
Python, PhP, Perl, Html del programa principal
con los de las libreras
para producir el programa
ejecutable.

Fortran, C, C++,Pascal

Lenguaje C++
Clasificacin de los lenguajes de programacin

Lenguaje C++
Clasificacin de los lenguajes de programacin

Lenguaje C++
Clasificacin de los lenguajes de programacin
Criterio 3: el Paradigma de Programacin
Procedimentamental
(Estructurado)

Son lenguajes que organizan los


algoritmos en procedimientos,
funciones o subrutinas, cuyo objeto es
dividir en pasos ms simple un
problema complejo.
p
p j Se dicen
estructurados porque adems plantean
un modelo para la organizacin en el
cual se organizan las instrucciones
para que se ejecuten de forma
secuencial, esto es, evitando saltos.

Fortran, C, Pascal

Otros
Ot
Paradigmas

Programacin Orientada a Objetos


(POO)

Es una especializacin de la
programacin estructurada en el cual
d
ll en funcin
f

ell programa se desarrolla


de objetos. Los objetos integran
datos y programas (subrutinas) que
aplican sobre estos datos y permiten
la interaccin entre otros objetos
similares o no. Permite mejor
utilizacin de cdigo y facilita la
comprensin de las aplicaciones .

Java, C++, Python

Lenguaje C++
Clasificacin de los lenguajes de programacin
Criterio
C
i i 4: Estandarizacin
d i
i
Algunos lenguajes son estandarizados, otros no lo son y algunos otros
poseen un estndar informal.
Por qu es importante la estandarizacin?
La estandarizacin garantiza que un programa escrito un lenguaje
estndar se ejecute de la misma manera sin importar el
compilador /intrprete usado ni el sistema operativo.
Los organismos internacionales que producen estndares para
lenguajes de programacin son el ANSI (American National Stardard
Institute) y la ISO (International Standard Organization).
C11 es el nombre informal para el estndar ISO/IEC 9899:2011
que reglamenta
l
t all lenguaje
l
j C.
C
C++11 es el nombre informal para el estndar ISO/IEC 14882:2011
que reglamenta al lenguaje C++.

Lenguaje C++
Caractersticas del C++
El lenguaje C++ es un lenguaje de propsito general que ha
sido empleado para el desarrollar gran cantidad de aplicaciones
complejas como sistemas operativos, compiladores, procesadores de
t t bases
texto,
b
d datos
de
d t entre
t otras.
t
Ej
Ejemplos:
l
OS: Windows (95, 98, Me, 2000, XP, )
Procesador de texto: Microsoft Office
Exploradores de internet: Internet Explorer,
Explorer Firefox,
Firefox Google.
Google
Aplicaciones varias: Adobe, etc.
Es un lenguaje portable, es decir, ofrece la posibilidad de utilizarlo
t t en macroordenadores
tanto
d
d
como en mini
i i y microordenadores
i
d
d

Lenguaje C++
Caractersticas del C++
Posibilita una programacin estructurada o modular, POO,
programacin genrica y otros.
g j compilado
p
y estandarizado.
Es un lenguaje
Produce programas de cdigo compacto y eficiente
Caractersticas de Alto nivel con rasgos presentes de bajo nivel,
sin embargo para aplicaciones de bajo nivel se prefiere el
Ensamblador o el Lenguaje C.

Desventajas del C++


Puede ser difcil de aprender a manejar todas sus caractersticas.
Se requiere ms tiempo en conseguir el ejecutable, porque cada
p todo el fichero.
vez compila

Lenguaje C++
Primer programa en C++
Programa

// Mi primer programa en C++


#include <iostream>
using namespace std;
int main()
{
cout << Hola Mundo! << endl;
return 0;
}

Partes
Comentarios de lnea (//). Se utilizan
para explicar el uso o significado de
un programa.
Preprocesador: incluir una biblioteca
estandar o de usuario. En esta caso
la de en de entrada/salida.
Uso del espacio de nombre std que
incluye a todos los elementos de la
bibli t
biblioteca
estandar
t d de
d C++
C
(e.g.
(
cout).
Definicin de la funcin main.
E t es lla primera
Esta
i
funcin
f
i que
ejecutan los programas en C++.

Lenguaje C++
Primer programa en C++

#include <iostream>
using namespace std;
int main()
() {
cout << Hola Mundo! << endl;
}

Incluir biblioteca estandar de


entrada/salida (preprocesador)
Uso del espacio de nombre
std que incluye al objeto cout
Definicin de la funcin main
main
primera funcin en ejecutarse
en el programa.

Lenguaje C++
Directivas del Preprocesador de C++
Los programas en C++ (como los de C) pueden incluir otros
programas externos denominados bibliotecas mediante el
Preprocesador y la directiva:
#include <archivo_de_biblioteca>

Lenguaje C++
Directivas del Preprocesador de C++
El Preprocesador se llama antes de compilar el programa y se
encarga de interpretar todas las instrucciones que comiencen por el
smbolo de #
#.
Otra directiva muy comnmente utilizada del Preprocesador es
#define La misma permite definir palabras en el proceso de
#define.
compilacin para posteriormente realizar compilaciones selectivas, o
simplemente para reemplazar un valor numrico donde aparezcan
dichas p
palabras. Tambin es p
posible definir p
pseudo-funciones con
esta directiva.
Otras directivas tiles son las tres de compilacin condicional #if#elif-#else-#endif, #ifdef-#else-#endif y #ifndef-#else#endif.

Lenguaje C++
Definiciones
Algoritmo
Es una secuencia ordenada de pasos que permiten
alcanzar
l
una meta obtener
b
o resolver
l
un problema.
bl
No necesariamente son programas de computadora.

Programa
Es una secuencia de instrucciones ordenadas a ser ejecutadas por
una computadora. Un programa debe estar escrito en algn lenguaje
de programacin, y puede incluir uno o ms algoritmos

Lenguaje C++
Definiciones
Constante
Una constante es un valor que no puede ser alterado durante la
ejecucin de un programa
programa. Se crean anteponiendo la palabra const
a una declaracin de variable.

Variable
Las variables son espacios reservados en la memoria que pueden
cambiar de contenido a lo largo de la ejecucin de un programa. Se
declaran (crean) colocando el tipo de dato y su nombre
(identificador).

Lenguaje C++
Tipos bsicos de datos

enteros

reales
vacio

caracteres

complejos

punteros

lgicos

El soporte para datos complejos viene dado por la biblioteca


estndar de C++, en el archivo de cabecera complex.

Modificadores

Tamao
Signo
Signo
Almacenamiento
Proteccin

Lenguaje C++
Tipos de datos

Modificadores
Tamao

Signo

short
long
signed
unsigned
auto (por defecto)->seg. pila
register->registros

Modo de
Almacenar

Static >globales o montculo


Static->globales
Extern->globales
mutable y volatile->globales

private
Modo de
Proteccin
(POO)

protected
public
const

Lenguaje C++
Tipos de datos Primitivos (bsicos)
Nombre

Descripcin

Tamao

char

Carcter o entero pequeo 1byte

Rango

signed: -128 a 127


unsigned: 0 a 255
signed: -32768 a 32767
unsigned: 0 a 65535

short int(short)
(
) Entero corto

2bytes
y

int

4bytes

signed: -2147483648 a 2147483647


unsigned: 0 a 4294967295

long int (long) Nmero entero largo

4bytes

signed
i
d: -2147483648
2147483648 a 2147483647
unsigned: 0 a 4294967295

bool

Valor booleano

1byte

true o false

Nmero punto flotante


N
fl
de
d
precisin simple
Nmero punto flotante de
precisin doble
Nmero punto flotante de
precisin doble extendida
Caracteres largos

+// 3.4*e(+/3 4* ( / 38)


(~7 dgitos de precisin)
+/- 1.7*e(+/- 308)
8bytes
(~15 dgitos de precisin)
+/- 1.7*e(+/- 308)
8bytes
(~15 dgitos de precisin)
2 o 4 bytes 1 carcter largo

float
double
long double
wchar_t

Nmero entero

4bytes

Lenguaje C++
Declaracin de datos
Para poder
P
d utilizar
tili
d t en C++
datos
C
es necesario
i crearlos,
l
a este
t procedimiento
di i t
se le denomina declaracin de datos.
En C
C++ los tipos bsicos de datos se declaran colocando el tipo seguido por
una lista de nombres (o identificadores) de datos separada por comas.
Los identificadores son los nombres asignados a las variables, contantes,
funciones nombres de espacio,
funciones,
espacio objetos y clases.
clases Estos pueden contener
caracteres alfanumricos y el carcter de piso _ (no se permiten caracteres
especiales). Adems, los identificadores no pueden coincidir con las palabras
reservadas del lenguaje.
g j

tipo_de_dato nombre1 [, nombre2, nombre 3,]

Lenguaje C++
Tipos de datos
Enteros
Existen diferentes tamaos de nmeros enteros que, segn el compilador y
la plataforma de hardware, pueden tener desde 1 byte hasta 8 bytes

Lenguaje C++
Tipos de datos
Enteros
int a1; // Entero de 4 Bytes con signo
int a2=50; // Declaracin e inicializacin de un entero de 4 Bytes.
Bytes
unsigned int a3; // Enteros de 4 Bytes sin signo
signed long a4; /* Enteros de 4 Bytes con signo. Puede omitirse el
modificador
difi d signed
i
d */
signed long long a5 = 10000000; // Enteros de 8 Bytes con signo
const int radio = 20;
/* Constantes creadas por el compilador */
#define K 20
/* Constantes creadas por el preprocesador */
bool condicion = false; // Declara una variable booleana y le asigna falso.

Lenguaje C++
Tipos de datos
Reales
Llamados tambin punto flotantes, ya que utilizan un sistema de
representacin basado en la tcnica de punto flotante, que permite operar
con nmeros reales de diversas magnitudes, mediante un nmero decimal
llamado mantisa y un exponente que indica el orden de magnitud.
Estndar IEEE 754
Precisin simple (4 Bytes)
[ 1 bit-signo | 8 bits-exponente | 23 bits-mantisa ]
Precisin double (8 Bytes)
[ 1 bit-signo | 11 bits-exponente | 52 bits-mantisa ]
Precisin double extendida (10 Bytes)
[ 1 bit-signo
g | 1 bit-parte
p
entera | 15 bits-exponente
p
| 63 bits-mantisa ]
No soportado por todos los compiladores y sistemas operativos

Lenguaje C++
Tipos de datos
Reales
El tipo de dato punto flotante en lenguaje C++ slo tiene dos
tamaos: float y double, que son 4 bytes y 8 bytes respectivamente. Se
les puede utilizar tanto para representar nmeros decimales, como para
representar nmeros enteros con un orden de magnitud muy grande.
fl
float
a;
double a = 1e23;
double a = 3.1416;
float a = 4e-9;
double a = -78;
const double pi = 3.141516927;

Lenguaje C++
Tipos de datos
Caracteres (char)
Los caracteres se representan utilizando el tipo char, que tiene slo 1 byte
de tamao. Este tipo se utiliza para representar los 255 caracteres de la
tabla de caracteres ASCII (del ingls American Standard Code for
Information Interchange Cdigo Estndar para el Intercambio de
Informacin ). El tipo char es tambin un tipo entero, ya que puede tomar
valores
l
d 0 a 255.
de
255 Este
E t estndar
t d es compatible
tibl con ell ISO/IEC 10646
creado por el ISO Working Group, que define el un conjunto de
caracteres universales en octetos.
#include <iostream>
int main() {
char a = 's';
char A = a;
char c;
std::cin>>c ;
std::cout<<"the value of" <<c<<" is" << int(c)<<\n;
}

Lenguaje C++
Tipos de datos
Caracteres

Lenguaje C++
Tipos de datos
Caracteres

Lenguaje C++
Tipos de datos
Caracteres

Lenguaje C++
Tipos de datos
Caracteres Anchos (wchar_t)
Al igual que los datos de tipo char son datos enteros de 2 4 Bytes, que
permiten almacenar caracteres de tipo
p
p UNICODE q
que tambin es
compatible con el estndar ISO/IEC 10646 y otros estndares.
El estndar UNICODE permite almacenar los caracteres en 8, 16 y 32 bits.
El estndar UNICODE permite representar los caracteres y grafemas de
diferentes lenguas,
lenguas adems de sus signos diacrticos,
diacrticos caracteres de
puntuacin, ideogramas, caracteres silbicos, caracteres de control y otros .
#include <iostream>
int main()
() {
wchar_t aw= 's';
wchar_t a2w= L's';

char c;

std::wcout<<Lcadena lde caracteres anchos" <<endl;


}

Observe que la letra L que precede a la cadena de caracteres indica que la


cadena est en representacin UNICODE (usar wcout y wcin).
Consorcio UNICODE: http://www.unicode.org/

Lenguaje C++
Tipos de datos
Caracteres Anchos (wchar_t): tabla UNICODE

Lenguaje C++
Tipos de datos
Declaraciones
En C++ todas las variables deben ser declaradas antes de su uso.
uso
Una declaracin especifica un tipo y contiene una lista de una o ms
variables (identificadores) de ese tipo.
int
menor;
int
mayor;
int
menor, mayor, paso;
int
paso;
char
inicial, nombre[100];
char
inicial;;
char
int i =0;
i t lilimite=maximo+1;
int
it
i
1

nombre[100];

Lenguaje C++
Tipos de datos
Declaraciones de variables
<clase_almacenamiento> <modificador_tipo> Tipo_dato Nombre_variable
static long int cantidad;
int importe, suma, total, media;
char letra,
letra carac = A;
A;
flota precio = 500;

Declaraciones de constantes
Hay dos tipos de constantes en C++ las creadas por el compilador y las
creadas por el preprocesador.
const long int maximo; // creada por el compilador
#define MAX 100 // creada por el preprocesador

Lenguaje C++
Tipos de datos:
Modificadores de tipo de almacenamiento
auto (por defecto): los datos creados dentro de funciones se almacenan
en el segmento de pila y su valor no se retiene entre llamadas.
register: almacena los datos en los registros del CPU, si es posible.
static: almacena los datos en el segmento de datos pero son visibles
slo
l dentro
d t de
d la
l funcin
f
i donde
d d se crearon.
extern: indica al compilador que las variables globales y funciones no
estaticas p
pueden utilizarce desde otros archivos.
mutable: indica que datos compuestos de tipo constante poseen
campos que pueden cambiar.
volatile: indican que la variable puede cambiar por fuentes externas de
software o hardware.

Lenguaje C++
Tipos de datos
Literales
i
l
Representan valores constantes naturales alfanumricas que permiten
representar distintos valores. Se utilizan para darle valores a las variables y
constantes.
// Literales enteros
5, 6, -20 // decimales
0113 // octales
0x4b // hexadeciamales
33u // entero sin signo
33l
// entero largo
33ul // entero largo sin signo

// Literales de caracteres ASCII


d, c, a
// Literales de cadenas de caracteres
// ASCII
Hola Mundo!!!
palabra

// Literales de cadenas UNICODE


// Literales decimales
La
3.14159 // double
LHola Mundo!!!
6.02e23 // 6.02 x 10^23 double
1 6e-19L
1.6e
19L // 1
1.6
6 x 10^-19
10 19 long double
6.02e23f // float

Lenguaje C++
Tipos de datos
Visibilidad
i ibilid d de
d los
l datos
d
Establece desde donde son visibles los datos. La visibilidad es global
cuando los datos se declaran fuera de cualquier par de llaves {} de lo
contrario son locales. Observacin: los datos globales se inicializan en cero,

mientras que los locales no.

Variables globales

Variables locales

#include <iostream>
using namespace std;
int entero;
char car=a;
int main() {
unsigned int car=3;
double simple (3.1415);
cout<<car<<entero<<endl;
return 0;
}

Formas alternas para


asignar valores iniciales a variables. La
primera es una
asignacin y la
segunda utiliza un
constructor.

Lenguaje C++
Tipos de datos
Tipo especial: void
Permite indicar de forma explcita que no existe ningn dato. El otro uso de
este tipo es para referirse a un puntero a un objeto de tipo desconocido.
void a; // error: a tiene que ser de tipo distinto a vaco.
void g(); // La funcin g no devuelve datos
datos.
void *p; // declaracin de un puntero a un dato de tipo desconocido.

Lenguaje C++
Conversin entre tipos de datos
C
Conversin
i automtica:
i
Cuando se operan con datos primitivos de diferentes tipos en una misma
expresin,
p
, se determina cual es el dato de mayor
y jjerarqua
q
y todos los
dems se convierten en este tipo. Las reglas de jerarqua se muestran a
continuacin:

int < unsigned < long int < unsigned long < float < double < long double
Note que los datos bool, char, short o enum se promueven a int.

Conversin explcita:
p
Convierte explcitamente los datos de un tipo en otro sin atender a las reglas
de conversin automticas. Las dos maneras clsicas de realizar esto son:
Alternativa 1: (tipo) expresin // la expresin se convierte al tipo entre parntesis
Alternativa 2: Tipo(expresin) // igual que antes, pero parecido a una llama de
// funcin.

Lenguaje C++
Palabras reservadas del C++
Se pueden utilizar para los nombres de variables cualquier combinacin
deseada de palabras, excepto las 63 siguientes que estn reservadas para
uso exclusivo del lenguaje:
asm
catch
continue
d
dynamic_cast
i
t
extern
goto
mutable
protected
short
struct
true
union
volatile

auto
char
default
else
l
false
if
namespace
p
public
signed
switch
try
unsigned
wchar_t

bool
class
delete
enum
float
inline
new
register
sizeof
template
typedef
using
while

break
const
do
explicit
li it
for
int
operator
p
reinterpret_cast
static
this
typeid
virtual

case
const_cast
double
exportt
friend
long
private
p
return
static_cast
throw
typename
void

Lenguaje C++
Operadores de entrada/salida
Las operaciones de entrada y salida no estn propiamente definidas por el
lenguaje C++, sin embargo las necesidades de interaccin con el mundo
externos son notables.
Para cubrir
P
b i los
l requerimientos
i i t de
d entrada
t d y salida
lid de
d datos,
d t
se recurre all
uso de bibliotecas, entre las cuales la principal es: iostream.h
Salida (cout): permite imprimir a la salida por defecto, el monitor.
Utiliza el operador << para indicar que el flujo de datos se dirige
a la salida estndar.
cout << Oracion
Oracion de prueba.
prueba ;;
cout << 365 << das del ao. << endl;
cout << El valor de la variable x es: << x << \n;

Ob
Observacin:
i endl
dl y \n
\ imprimen
i
i
un salto
l de
d lnea
l
y retorno de
d carro,
pero endl adems vaca el buffer para flujos con buffer.

Lenguaje C++
Operadores de entrada/salida
Escritura: secuencias de escape para representar caracteres
especiales.

#include <iostream>
using
g namespace
p
std;
;
int main() {
cout<< Hola Mundo! << endl;
cout<< \tTabulador << endl;
cout<<
t<< Salto
S lt de
d linea\n;
li
\
return 0;
}

Lenguaje C++
Operadores de entrada/salida
Entrada (cin): permite leer de la entrada por defecto, el teclado.
Utiliza el operador >> para indicar que el flujo de datos se dirige
a la variable que almacenar el valor ledo del teclado.
cin espera hasta que se presione la tecla enter para leer los datos
datos.
int edad;
double peso, altura;
char letra,
letra cad[101],
cad[101] cadena1[101];
string cadena2;
cin >> edad;
cin >> peso >> altura;
// Lectura de cadenas de caracteres.
cin >> letra; // lee un carcter ASCII.
cin >> cad; // lee una palabra.
cin.getline(cadena1,100); /* lee una cadena de caracteres de hasta 100
100 caracteres */
/
getline(cin, cadena2); // lee una cadena utilizando la biblioteca string.h

Lenguaje C++
Operadores de entrada/salida
Conversin de cadenas a valores numricos: la conversin de cadenas
a valores numricos se puede realiza tambin con la biblioteca
sstream.h (stringstream) , como se muestra en el siguiente ejemplo.
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main () {
string mystr;
float price=0;
int quantity=0;
cout << "Enter price: ";
getline (cin,mystr);
stringstream(mystr) >> price;
cout << "Enter quantity: ";
getline (cin,mystr);
stringstream(mystr) >> quantity;
cout << "Total price: " << price*quantity << endl;
return 0;
}

Lenguaje C++
Operadores de entrada/salida
El manejo de archivos para la lectura y escritura se realiza mediante
otro conjunto de bibliotecas estndares referidas a continuacin:
ofstream: contiene mtodos (funciones) para escribir en archivos.
ifstream: contine mtodos para leer de archivos.
f t
fstream:
contiene
ti
mtodos
t d para lleer y escribir
ibi d
de archivos.
hi
En general solamente se utiliza la biblioteca fstream.h para el manejo de
archivos ya que combina las funciones de entrada y salida.
archivos,
salida

Lenguaje C++
Funciones
E una seccin
Es
i de
d cdigo
di
i d
independiente,
di
con nombre,
b
que ejecuta
j
una
tarea especfica y puede o no devolver un valor al programa que la llam.
Las funciones dividen tareas grandes de computacin en
varias pequeas, ocultando la manera como realizan su
ttarea. Ad
permiten
it
tili
di
d
ll d
Adems,
reutilizar
ell cdigo
desarrollado
por otros de forma modular.

Sencillez

Claridad

Eficiencia

Nota: todos los programas en C++ poseen una funcin principal denominada
main donde se inicia la ejecucin del programa.

Lenguaje C++
Funciones
Existen tres operaciones que se requieren para utilizar las funciones:
1. Definicin: es donde se indica como se denomina la funcin
(denominado prototipo de la funcin) y la manera en la que realiza su
trabajo (cuerpo de la funcin).
2. Declaracin: indica como se denomina la funcin y las variables de
entrada y salida (prototipo). Se requiere declarar las funciones antes de
utilizarlas.
3 Llamado:
3.
Ll
d para usar una funcin
f
i se llama
ll
utilizando
ili
d su nombre
b y los
l
parmetros o variables de entrada (parte del prototipo).

Partes del prototipo de una funcin:


tipo_retorno nombre_de_la_funcin (paramtro1, paramtro2,...)

Lenguaje C++
Funciones: prototipo
Tipo de retorno: indica el TIPO de dato (valor) que devuelve la

funcin.

Sin valor

void

Con valor

int , float , double , char , u otros tipo del


lenguaje o creados por el usuario.

Parmetros: establece los datos que recibe la funcin para poder

realizar su trabajo. Cada parmetro posee un TIPO y un


identificador.
void imprimir()

Tipo
p de retorno

Identificador o nombre
de la funcin

int factorial( int n )


float promedio( int A, int B )

Parmetros

Lenguaje C++
Funciones: definicin
Ejemplo: Hola mundo
#include <iostream>
using namespace std;
Prototipo int main()

{
cout<< Hola Mundo! << endl;
cout<<
t<< \tT
\tTabulador
b l d << endl;
dl
cout<< Salto de linea\n;
return 0;

Cuerpo

Lenguaje C++
Funciones: declaracin y llamado
Ejemplo
#include <iostream>
U i
Using
namespace std;
td
void holamundo();

Declaracin

int main()
{
holamundo();
return 0;
;
}
Llamado
void holamundo()
{
cout << Hola Mundo!!! << endl;
}

Lenguaje C++
Funciones: ejemplo 1 de llamado a una funcin
Ejemplo
j
l

#include <iostream>
using namespace std;
double promedio(int x, int y);
int main(void)
{
double prom;
int A=5,B=8;
prom = promedio(A,B);
di (A B)
cout << El promedio es: << prom << endl;
return 0;
}
double promedio(int num1, int num2)
{
double resultado;
resultado = (num1 + num2)/2.0;
return resultado;
}

Lenguaje C++
Funciones: ejemplo 2 ocultamiento de la
informacin
#include <iostream>
using namespace std;
void sumar
sumar_valor(int
valor(int numero);
int main(void)
{
int numero = 57;
sumar_valor(numero);
cout << "Valor de numero dentro de main() es: << numero << endl;
return 0;
}
void sumar_valor(int numero)
{
numero++;
cout << "Valor de numero dentro sumar_valor() es: << numero << endl;
return;
}

Lenguaje C++
Funciones y variables
Revisin de variables locales y globales
Los datos declarados dentro de una funcin solo son accesibles dentro de
esta misma funcin y se les conocen como Variables Locales. Las
variables locales se definen dentro de cada una de las funciones y son
totalmente distinta una de otra a p
pesar de p
poseer identificadores idnticos,
y no se puede utilizar fuera de esta.
Las Variables Globales son las que se definen fuera de cualquier funcin,
funcin
estas variables se pueden utilizar dentro de la funcin main() y dentro de
cualquier funcin creada por nosotros.

Lenguaje C++
Funciones
Variables locales

void funcion1()
{
int dato = 53;
cout << Funcion1, dato=
<< dato << endl;
}

#include <iostream>
using namespace std;
int main(void)
{
funcion1();
f
funcion2();
i 2()
return 0;
}
void funcion2()
{
double dato = 25.0;
cout << "Funcion2, dato=
<< dato
d
<< endl;
dl
}

Lenguaje C++
Funciones
Variables globales
#include <iostream>
using namespace std;
int variable_G = 99;
void funcion();
main()
{
cout << Main: variable global = << variable_G << endl;
funcion();
}
void funcion()
{
cout << Funcion:
Funcion: variable global << variable
variable_G
G << endl;
}

Lenguaje C++
Funciones: parmetros por defecto

(opcional)

En C++ las funciones pueden recibir algunos parmetros y los


dems pueden tener valores por defecto. Los parmetros por
defecto se especifican en el prototipo como muestra el siguiente
ejemplo.
l
int incrementar (int valor, int incremento=1);
int incrementar (int valor, int incremento) {
return (valor+incremento);
}

Observacin: se requiere que todos los parmetros a la derecha del


primer parmetro

por defecto
d f
tambin
b posean un valor
l
por
defecto.
int sumar(int
(
primer,, int segundo=0,
p
g
, int tercero=0);
); VALIDO
int sumar(int primer, int segundo=0, int tercero);
INVALIDO
int sumar(int primer, int segundo, int tercero=0);
VALIDO

Lenguaje C++
Funciones inline:

(opcional)

Las funciones cortas que se llaman muchas veces y que poseen


una sola clausula de retorno (return) pueden definirse como enlnea. Este tipo de funciones se ejecuta ms rpidamente que otras
d b d a que ell compilador
debido
l d copia su contenido
d en cada
d lugar
l
d d
donde
se hubiese llamado la funcin, esto es, nunca se produce el
llamado.
inline long cuadrado(long int num) {
return (num*num);
}

Lenguaje C++
Funciones : sobrecarga de funciones

(opcional)

Existen muchos funciones que realizan las mismas operaciones


sobre distintos tipos de datos (e.g. enteros, punto flotante, enteros
sin signo, etc) o con distinto nmero de parmetros. En estos
casos es conveniente utilizar
l
ell mismo nombre
b para las
l distintas
d
funciones que realizan la misma tarea sobre diferentes tipos de
datos, a esto se le denomina sobrecarga de funciones.
int maximo(int a, int b);
int maximo (int a, int b, int c);
float maximo (float a,
a float b);
double maximo (double a, double b)

Observe que el compilador puede determinar la funcin


sobrecargada a utilizar mediante el nmero y tipo de parmetros
que recibe.

Lenguaje C++
Operadores
Aritmticos
Los operadores son smbolos que tienen un significado especifico y que le
indican al p
procesador que
q operacin
p
ha de realizar.
C++ incluye 5 operadores bsicos para operaciones aritmticas

Si los operandos son enteros el resultado es entero. Si alguno de ellos es


double, float o long double el resultado ser flotante.
Un operador bsico para modificar una variable es el operador de
asignacin =. Este operador le asigna el valor a la derecha del operador
a la variable ubicada a la izquierda del mismo.

Lenguaje C++
C++
Operadores
Aritmticos
Funciones de la librera <cmath>:
double sin(valor);

double cosh(valor);

double cos(valor);

double tanh(valor);

double tan(valor);

double log10(valor);

double asin(valor);

double log(valor);

double atan(valor);

double ldexp(valor1,valor2);

double acos(valor);

double pow(valor);

double sinh(valor);

double sqrt(valor);

Nota: cmath contiene la biblioteca de funciones matemticas en C++.

Lenguaje C++
Operadores
Aritmticos

Las expresiones matemticas se evalan de izquierda a derecha


Es recomendable utilizar parntesis para eliminar interpretaciones
errneas y posibles ambiguedades
i i 1

Si
Signo
negativo
ti
i
Casos particulares
Incremento
++
Decremento
--

Lenguaje C++
Operadores
Relacionales

Lgicos

Lenguaje C++
Operadores
De bits: slo aplica a datos enteros y caracteres con o sin signo.

Los datos punto flotante arrojan errores de compilacin.


Operador

Nombre

Significado

Ejemplo

&

AND

AND a nivel de bits

p & 255

OR

OR a nivel de bits

s | 125

XOR

XOR a nivel de bits

y ^ 44

NOT

Negacin de bits

~n

<<

SHL

Desplazamiento a la
izquierda

j<<3

>>

SHR

Desplazamiento a la
derecha

k>>5

Lenguaje C++
Operadores
Otros
Coma (,):
(,) : a = (b=3,
(b=3 b+2); // b=3 y a=5
Tamao de dato sizeof: a = sizeof(int a); // a=4
D i i ? : expr ? valor_verdadero
Desicin
l
d d
: valor_falso
l f l
Conversin de tipo:
float a = 3.1415;
int b = (int) a; int b = int(a) // convierte el dato decimal en entero

Lenguaje C++
Operadores: precedencia
Nivel
1
2

4
5
6
7
8
9

Operador
::
() [] . -> ++ -- conversin de tipo
p
++ -- ~ ! sizeof new delete
*&
+(type)
.* ->*
*/%+<< >> < > <= >= == !=
& ^ | && ||
?:

Descripcin
Scope
Postfix
unarios (prefijo)
punteros
Signo
Tipo
Miembro de puntero
Aritmticos
Relacional
De bits
Conditional

Der. a izq.
Izq. a der.
Izq. a der.
q a der.
Izq.
Izq. a der.
Der. a izq.

10

= *= /= %= += -= >>= <<= &= ^= |=

Asignacin

Der. a izq.

11

comma

Orden
Izq. a der.
Izq.
q a der.
Der. a izq.

Lenguaje C++
Estructuras condicionales
if else else if
Este conjunto de proposiciones se utilizan para
expresar decisiones.
decisiones Permite realizar una pregunta
donde la posible respuesta solo puede ser verdadera o
falsa.
"si se cumple la condicin, haz esto, y sino, haz esto otro"

Lenguaje C++
Estructuras condicionales
if else else if
if (condicin)
sentencia;

if (nota>=10)
cout << Aprobado;

if (condicin)
sentencia1;
t
i 1
else
sentencia2;

if (nota>=10)
A b d
coutt << Aprobado;
Else
cout << Aplazado;

Lenguaje C++
Estructuras condicionales
if else else if
if (condicin)
{
sentencia;
sentencia;

sentencia;
sentencia;

}
else
{

La indentacin (los
espacios al comienzo de
las
l lneas)
l
) no es
necesaria, pero ayuda a
la claridad del cdigo

Lenguaje C++
Estructuras condicionales
if else if else

if (T>=100)
caliente;
else if (T>=50)
(T> 50)
tibio;
else if (T>=0)
f
fresco;
else
frio;

if (condicin1)

sentencia1;
i 1
else if (condicin2)
sentencia2;
else if (condicin3)
sentencia3;
else
l

sentencia ninguno de los anteriores;


fro

Tibio

fresco

50

caliente

100

Lenguaje C++
Estructuras condicionales
switch / case
C++

tiene

incorporada

una

sentencia

de

bifurcacin

mltiple

llllamada
d switch
it h. Con
C
esta
t sentencia,
t
i
l computadora
la
t d
comprueba
b una
variable (enteras o de tipo char) sucesivamente frente a una lista de
constantes enteras. Despus de encontrar una coincidencia, la computadora
ejecuta la sentencia o bloque de sentencias que se asocian con la constante

Lenguaje C++
Estructuras condicionales
switch / case
switch(mes)
{
case 1:
enero;
b k
break;
case 2:
febrero;
break;

default:
error;
break;

Lenguaje C++
Estructuras cclicas
while
El bucle while sirve para ejecutar cdigo reiteradas veces. El uso
de esta instruccin o de otras estructuras cclicas queda a
discrecin del programador

while (expresion)
{
sentencias
}

relacin

A>=B

entero

0,1,5,1000...

constante

Lenguaje C++
Estructuras cclicas
while
Ejemplo: imprimir los nmeros del 1 al 10
#include <iostream>
using namespace std;
main() {
int i=1;
while (i<
(i<=10)
10) {
cout << i << ;
i++;
}
return 0;
}

Lenguaje C++
Estructuras cclicas
do while
Realiza la misma tarea que el while con la diferencia de que evala la
condicin al final del ciclo.
#include <iostream>
using namespace std;
int main() {
int i=1;
do {
cout << i << ;
i++;
} while ((i<=10)) ;
return 0;
}

Lenguaje C++
Estructuras cclicas
for
Esta instruccin cclica se halla presente en la mayora de los
lenguajes de programacin estructurados
estructurados, y permite repetir una
instruccin o conjunto de instrucciones un nmero determinado
de veces.
for (inicializacin; condicin de paro; paso)
{
sentencias
}

Lenguaje C++
Estructuras cclicas
for
Ejemplo: imprimir la tabla de multiplicar del 2
#include <iostream>
using namespace std;
main() {
int i;
int tabla = 2;
for (i=1;i<11;i++) {
cout << 2 << x << i << = << tabla*i<< endl;
if(i==10)
cout << endl << endl;
}
}

Lenguaje C++
C++
Estructuras cclicas
for
Ejemplo: introducir una serie de nmeros en un arreglo
for(i=0;i<n;i++){
cout << Ingrese
g
el valor # << i+1<< :<<endl;;
cin >> arreglo[i];
}
arreglo[0]
arreglo[1]

arreglo[n-1]

C++ inicia los


arreglos en la
posicin 0

Lenguaje C++
C++
Estructuras cclicas
Sentencias goto , break y continue
goto : realiza un salto a la etiqueta especificada (e.g.
(e g goto et1;)
break : interrumpe la ejecucin de una estructura cclica y continua en
l instrucciones que le
las
l siguen.
continue : se salta el resto del ciclo actual y reinicia uno nuevo. No
implica necesariamente la salida de la estructura cclica.

Lenguaje C++
Arreglos
Los arreglos son una coleccin de variables del mismo tipo que se
referencian utilizando un nombre comn.
En C++ la cantidad de elementos que podr contener un arreglo es fijo y
se define cuando se declara el arreglo.
Los ndices de los arreglos comienzan en cero (0) y terminan en el tamao
d l arreglo
del
l menos 1.
1
Los arreglos declarados globalmente o como static se inicializan a cero,
mientras
e t as que los
os locales
oca es no
o se inicializan.
ca a
tipo_elemento nombre[tamao];

arreglo[0]
arreglo[1]

int
char
double
float

arreglo[n-1]

N elementos

Lenguaje C++
Arreglos
int notas[40];
double vector[] = { -1
1 , 5 , 3 };

-1
1

vector[0]
vector[1]
[ ]
vector[2]

int lista [10];

lista[2] = 15;

// sobrescribir elemento 3

num = lista[8];

// extraer elemento 9

C++ no verifica
C
ifi llos llmites
it d
de los
l ndices,
di
de
d manera que en ell
ejemplo anterior lista[19] es una operacin vlida aunque no
exista el dato.

Lenguaje C++
Arreglos
float tabla[20][30];
int arreglo[n][m];

arreglo[0][0]

arreglo[0][m-1]

arreglo[1][0]

arreglo[1][m-1]

arreglo[n-1][1]

n x m elementos

arreglo[n-1][m-1]

Lenguaje C++
Arreglos
float tabla[20][30][40];

Lenguaje C++
Arreglos
Manejo de arreglos : introduccin de elementos
n = numero de elementos

-1
vector[0]

10

-2
vector[9]

iintt vector[10],
t [10] n=10;
10
for(i=0 ; i<n ; i++)
{
cout << Valor # << i+1 << : << endl;;
cin >> vector[i];
}

Lenguaje C++
C++
Arreglos
Manejo de arreglos : suma
9

-1

10

-2

vector i
i 0

vector[0]

suma=0;
(
; i<n ; i++))
for(i=0
{
suma = suma + vector[i];
}

vector[9]

suma=0;
for(i=0
(
; i<n ; i++))
{
suma += vector[i];
}

Lenguaje C++
Arreglos
Manejo de arreglos : imprimir un arreglo
9

-1

10

-2

vector i
i 0

vector[0]

for(i=0 ; i<n ; i++)


{
cout << |\t << vector[i] << \t| << endl;
}

vector[9]

Lenguaje C++
Arreglos
Manejo de matrices : introduccin de elementos

a11

a
21

an1

a12 a1m

a22 a2 m
aij

an 2 anm

for(i=0 ; i<n ; i++)


{
f (j 0 ; j<m
for(j=0
j
; j++)
j )
{
cout << Elemento << i+1, j+1 << de la matriz: ;
[ ][j];
cin >> matriz[i][j];
}
}

Lenguaje C++
C++
Arreglos
Manejo de matrices : suma por filas

a11

a
21

an1

a12
a22

an 2

a1m

a2m
2
aij

anm

matriz [1][ j ] sumfila[1]


j 1
m

matriz [2][ j ] sumfila[2]


j 1

matriz [ n ][ j ] sumfila[ n ]
j 1

TOTAL

sumfila[i ]
i 1

Lenguaje C++
Arreglos
Manejo de matrices : suma por filas
for(i=0
(
; i<n ; i++))
{
sumfila[i] = 0;
for(j=0
for(j
0 ; jj<m
m ; jj++))
{
sumfila[i] += matriz[i][j];
}
}

TOTAL

matriz[i ][ j ] sumfila[i ]
i 1 j 1

i 1

Lenguaje C++
Arreglos
Manejo de matrices : suma por columnas

a11

a
21

an1
n

matriz [ j ][1]
j 1

a12
a22

an 2

a1m

a2 m
aij

anm
n

matriz [ j ][ m ]
j 1

sumcol[1]

sumcol[ m ]

TOTAL

sumcol[ j ]
j 1

Lenguaje C++
Arreglos
Manejo de matrices : suma por columnas
for(j=0 ; j<m ; j++)
{
sumcol[j] = 0;
for(i=0 ; i<n ; i++)
{
sumcol[j]
[j] += matriz[i][j];
[ ][j];
}
}

TOTAL

matriz[i ]] j ] sumcol[ j ]
j 1 i 1

j 1

Lenguaje C++
C++
Tipos de datos derivados
Enumeraciones
Son conjuntos de constantes enteras relacionadas que pueden tomar UNO
d los
de
l posibles
ibl valores
l
asignados
i
d all momento
t de
d definirla.
d fi i l Cada
C d uno de
d los
l
valores especificados en la definicin de la unin es asignado un valor
entero que puede ser especificado por el usuario. Si el valor entero no se
especifica entonces se asocian con las constantes enteras 0, 1, 2, 3,
Las enumeraciones se definen con la palabra enum seguida del identificador
del tipo enumeracin y finalmente de una lista de items que constituyen la
enumeracin.
enum identificador { enumerador1, enumerador2, numeradorN };
0

Lenguaje C++
C++
Tipos de datos derivados
Enumeraciones
Otras formas de crear enumeraciones se presentan a continuacin:
enum identificador { enumerador1=valor1, enumerador2=valor2,
numeradorN=valorN };
enum { enumerador1, enumerador2=valor2, numeradorN};
Algunos ejemplos de posibles enumeraciones siguen:
enum dia {lunes, martes, mircoles, jueves, viernes, sbado, domingo};
enum color {amarillo, azul=4, rojo, verde=1, morado};
enum genero {masculino, femenino, androgeno};

Lenguaje C++
Tipos de datos derivados
Enumeraciones

La creacin de datos enumeracin requiere el uso del identificador


seguido del nombre de la variable. Opcionalmente, se puede
colocar antes del identificador la palabra reservada enum.
enum DiasSemanas {Domingo,Lunes,Martes,Miercoles,Jueves,Viernes,Sabado};
int main() {
DiasSemanas dia = Domingo; // alternativamente DiasSemanas dia;
int diaInt = dia;
f (di
for
(diaInt
I t=D
Domingo;
i
di
diaInt
I t<
<= Sabado;
S b d diaInt++)
di I t++) {
cout << diaInt << endl;
}
cout << endl;
return 0;
}

Lenguaje C++
C++
Tipos de datos derivados
Enumeraciones
#include <iostream>
enum colores {negro = -1, blanco = 7, azul, rojo, cian, verde, naranja};
main()
{
cout
cout
cout
cout
}

<<
<<
<<
<<

negro:
g
<< negro
g << endl;
blanco: << blanco << endl;
azul: << azul << endl;
rojo:
rojo: << rojo << endl;

Lenguaje C++
Tipos de datos derivados
Estructuras
Una estructura es una agrupacin de varios datos los cuales pueden ser de
igual o de diferente naturaleza (tipo). Las estructuras deben ser declaradas
al inicio del programa, antes del main()
A diferencia de los arreglos, las estructuras nos permiten agrupar varios
datos, que mantengan algn tipo de relacin, aunque sean de distinto tipo,
permitiendo manipularlos todos juntos, usando un mismo identificador, o
cada uno p
por separado
p
struct tipo_estructura
{
tipo_variable
ti
i bl nombre_variable1;
b
i bl 1
tipo_variable nombre_variable2;
};

Lenguaje C++
Tipos de datos derivados
Estructuras
struct trabajador
{
char nombre[20];
int edad;
char puesto[10];
};
trabajador fijo;

Campos

typedef struct trabajador;


trabajador fijo;

Lenguaje C++
Tipos de datos derivados
Estructuras
struct cd
{
char artista[25];
float precio;
int canciones;
};
typedef struct cd CD;
CD CD1,CD2;

Artista
CD1

precio
canciones
ca
c o es
canciones

CD2

Artista
precio

Lenguaje C++
Tipos de datos derivados
Estructuras
struct cd {
Artista=Rihanna
char
h artista[25];
ti t [25]
float precio;
Precio=52.60
int canciones;
Canciones=12
} CD1;;

cout << \n\tArtista: ;


cin >> CD1.artista;
cout << \n\tPrecio:
\n\tPrecio: ";;
cin >> CD1.precio;
cout << \n\t# de canciones: ";
cin >> CD1.canciones;
cout << "\nArtista: << CD1.artista << , Pistas:
<< CD1.canciones << , Precio: << CD1.precio;

Lenguaje C++
C++
Tipos de datos derivados
Estructuras
struct p
par
{
int x;
int y;
}

struct complejo
p j
{
double real;
double imaginario;
}

typedef struct par punto ;


punto P1,P2;

struct complejo A,B,C;


C.real=A.real+B.real;

P1.x=5;
P2.y=4;
y ;
P2=P1;

Lenguaje C++
Tipos de datos derivados
Arreglo de Estructuras
struct persona
p
{
long cedula;
char nombre[20];
};
typedef struct persona empleado;
empleado profesor[200];

profesor[i].nombre
profesor[i].cedula

Observacin 1: es posible tener estructuras anidadas.


Observacin 2: C++ admite declarar funciones dentro de las estructuras, a
tipo de dato se le denomina Clases y es uno de los elementos
fundamentales de la programacin orientada a objeto.

Lenguaje C++
Tipos de datos derivados
Uniones
La definicin de "unin" es similar a la de "estructura", La diferencia entre
las dos es que en una estructura, los miembros ocupan diferentes reas

de
la memoria, pero en una unin, los miembros ocupan la misma rea de
memoria. La memoria total de la unin se define por el dato de mayor
tamao que exista dentro de la unin.
Se puede acceder a sus campos pero no al mismo tiempo. Como ocupan la
misma rea de memoria, modificar uno equivale a modificar el valor del
otro.
union nombre {
tipo
p _variable campo1;
p ;
tipo_variable campo2;
};

DF1

Lenguaje C++
Tipos de datos derivados
Uniones
union p
palabra
{
char mensajes[50];
char ayudas[50];
}

struct sistema
{
char mensajes[50];
char ayudas[50];
}

palabra.mensajes = "Primer"

sistema.mensajes = "Primer"

palabra.ayudas = Segundo"

sistema.ayudas = Segundo"

Slide 103
DF1

Pensar en cambiar esta lamina o remodelarla


David Fernandez, 9/3/2013

Lenguaje C++
Tipos de datos derivados
Uniones
Las uniones son usadas cuando se necesita que una variable tome
valores de tipos diferentes. En el ejemplo siguiente:
union u_tag
{
int ival;
float fval;
char pval;
} uval;
la variable "uval" de tipo "u_tag" puede tomar valores:
"int" si se usa "uval.ival"
"fl t" sii se usa "uval.fval"
"float"
"
l f l"
"char *" si se usa "uval.pval"

Lenguaje C++
Punteros
Memoria

Lenguaje C++
Punteros
Memoria
Al declarar una variable
estamos
diciendo
al
ordenador que reserve una
parte de la memoria RAM
para almacenarla

La variable def guarda


la
direccin
donde
reside el grupo de
bytes de la variable
abc

Lenguaje C++
Punteros
Definicin
Un puntero es una variable que permite almacenar direcciones de
memoria
parte p
porque
q algunas
g
veces es la nica
Son muyy usados en C y C++,, en p
manera de programar ciertos clculos, en parte porque usualmente se
obtiene cdigo ms compacto y eficiente
Pueden producir fcilmente programas imposibles de
entender si se emplean sin precauciones

Lenguaje C++
Punteros
Definicin
El gran secreto de C++ esta en el uso
de los apuntadores

C++ usa los apuntadores en forma explicita y extensiva porque:


Es la nica forma de expresar algunos clculos.
Se genera cdigo compacto y eficiente.
Es una herramienta muy poderosa

Lenguaje C++
Punteros
Declaracin y manejo
La declaracin de un puntero es inconfundible ya que su declaracin
i l
incluye
uno o ms
asteriscos
t i
y su formato
f
t es ell siguiente:
i i t

El tipo del dato


puede ser:
entero
punto flotante
booleano
carcter
puntero
Dato compuesto

Lenguaje C++
Punteros
Ejemplo
int *puntero; // Declara un puntero a una variable tipo int
int var1; // Declara una variable tipo int
int var2;
var1
1 = 123456;
123456 // Almacena
Al
ell valor
l 123456
puntero = &var1; // Se almacena su direccin en puntero
cout << "var1 = << var1 << y su dir = << puntero << endl;
var2 = *puntero;
cout << "var2 = << var2 << y su dir = << &var2 << endl;

Lenguaje C++
Punteros
Operadores
El operador & antepuesto al nombre de una variable retorna el valor de
la direccin inicial de memoria donde el compilador almacen o
almacenar el valor de la variable. Para acceder al valor que se encuentra
en la direccin de memoria apuntada por un puntero se debe
"dereferenciar"
dereferenciar el puntero utilizando al operador *
* delante del mismo.
mismo
Por estos motivos se suele denominar a & el
operador de referencia y a * el operador
de indireccin.

Lenguaje C++
C++
Punteros
Ejemplo
int x = 1, y = 2, z[10];
int *ip,
*ip *ip2;

Etiqueta

Direccin

Contenido

CC0044

CC0048

ip

CC004C

ip2

CC0050

CC0054

z[0]
[ ]

CC0058

z[1]

CC005C

Lenguaje C++
Punteros
Ejemplo
int x = 1, y = 2, z[10];
int *ip
ip, *ip2;
ip2;
ip = &x;

Etiqueta

Direccin

Contenido

CC0044

CC0048

ip

CC004C

CC0044

ip2

CC0050

CC0054

z[0]
[ ]

CC0058

z[1]

CC005C

Lenguaje C++
Punteros
Ejemplo
int x = 1, y = 2, z[10];
int *ip
ip, *ip2;
ip2;
ip = &x;
y = *ip;

Etiqueta

Direccin

Contenido

CC0044

CC0048

ip

CC004C

CC0044

ip2

CC0050

CC0054

z[0]
[ ]

CC0058

z[1]

CC005C

Lenguaje C++
Punteros
Ejemplo
int x = 1, y = 2, z[10];
int *ip
ip, *ip2;
ip2;
ip = &x;
y = *ip;
*ip = 0;

Etiqueta

Direccin

Contenido

CC0044

CC0048

ip

CC004C

CC0044

ip2

CC0050

CC0054

z[0]
[ ]

CC0058

z[1]

CC005C

Lenguaje C++
Punteros
Ejemplo
int x = 1, y = 2, z[10];
int *ip
ip, *ip2;
ip2;
ip = &x;
y = *ip;
*ip = 0;
i 2 = ip;
ip2
i

Etiqueta

Direccin

Contenido

CC0044

CC0048

ip

CC004C

CC0044

ip2

CC0050

CC0044

CC0054

z[0]
[ ]

CC0058

z[1]

CC005C

Lenguaje C++
Punteros
Ejemplo
int x = 1, y = 2, z[10];
int *ip
ip, *ip2;
ip2;
ip = &x;
y = *ip;
*ip = 0;
i 2 = ip;
ip2
i
z[0] = *ip2;

Etiqueta

Direccin

Contenido

CC0044

CC0048

ip

CC004C

CC0044

ip2

CC0050

CC0044

CC0054

z[0]
[ ]

CC0058

z[1]

CC005C

Lenguaje C++
Punteros
Ejemplo
int x = 1, y = 2, z[10];
int *ip
ip, *ip2;
ip2;
ip = &x;
y = *ip;
*ip = 0;
i 2 = ip;
ip2
i
z[0] = *ip2;
ip2 = &z[0];

Etiqueta

Direccin

Contenido

CC0044

CC0048

ip

CC004C

CC0044

ip2

CC0050

CC0058

CC0054

z[0]
[ ]

CC0058

z[1]

CC005C

Lenguaje C++
Punteros
Ejemplo
int x = 1, y = 2, z[10];
int *ip
ip, *ip2;
ip2;
ip = &x;
y = *ip;
*ip = 0;
i 2 = ip;
ip2
i
z[0] = *ip2;
ip2 = &z[0];
*ip2
p = 7;;

Etiqueta

Direccin

Contenido

CC0044

CC0048

ip

CC004C

CC0044

ip2

CC0050

CC0058

CC0054

z[0]
[ ]

CC0058

z[1]

CC005C

Lenguaje C++
Punteros
Ejemplo
int x = 1, y = 2, z[10];
int *ip
ip, *ip2;
ip2;
ip = &x;
y = *ip;
*ip = 0;
i 2 = ip;
ip2
i
z[0] = *ip2;
ip2 = &z[0];
*ip2
p = 7;;
*ip = *ip2

Etiqueta

Direccin

Contenido

CC0044

CC0048

ip

CC004C

CC0044

ip2

CC0050

CC0058

CC0054

z[0]
[ ]

CC0058

z[1]

CC005C

Lenguaje C++
Punteros
Aritmtica de punteros
La aritmtica de punteros se limita a suma (incremento), resta
(d
(decremento),
t ) comparacin
i y asignacin
i
i utilizada
tili d con apuntadores.
t d
char c; // suponga que se crea en 0x400
p ;
char* pc;
short int a, *pa; // suponga que a se crea en 0x500
pc = &c; // pc ahora apunta a 0x400
pc = pc + 1; // pc ahora apunta a 0x401
pa = &a;
pa++; // pa contiene el valor 0x502

Lenguaje C++
Punteros
Aritmtica de punteros
En un arreglo,
g , su
nombre
es
un
puntero
constante.
Por lo tanto, el
nombre del arreglo
conoce donde est
el primer elemento
(primera variable) del
grupo.
g no es una variable,, es una constante.
El nombre del arreglo
Sus elementos son las variables.

No se requiere & si se apunta al inicio de un arreglo

Lenguaje C++
Punteros
Punteros y funciones
En general, cuando C++ pasa argumentos a funciones los pasa por valor,
es decir,
decir si el parmetro es modificado dentro de la funcin,
funcin una vez que
termina la funcin el valor pasado (original) de la variable permanece
inalterado.
Sin embargo, hay muchos casos que se quiere alterar el argumento
pasado a la funcin y recibir el nuevo valor una vez que la funcin ha
terminado Para hacer lo anterior se debe usar una llamada por
terminado.
referencia, que se realiza en C++ pasando un puntero al argumento.

Lenguaje C++
Punteros
Punteros y funciones
void intercambiar(a, b);
main() {
int a = 1,
1 b = 3;
cout<< A= << a << \tB=
<< b << endl;
intercambiar(a, b);
cout<<
t
A << a << \tB
A=
\tB=
<< b << endl;
}
void intercambiar(int x, int y) {
int temporal;
temporal = x;
x = y;
y = temporal;
}

intercambiar(&a, &b);

void intercambiar(int *px, int *py) {


int temporal;
temp = *px;
*px = *py;
*py = temporal;
}

Lenguaje C++
C++
Punteros
Arreglos de punteros
En C++ se pueden tener arreglos de apuntadores ya que,
los apuntadores son variables

i t *dia[7]
int
*di [7]

d arreglo
da:
l de
d 7 punteros
t
a enteros
t

int *vector[]={
vector[]={,,}}

vector: arreglo de n punteros a


enteros definido por la cantidad de
elementos presentes en {}

int ((*hora)[12]
)[ ]

hora: p
puntero a un arreglo
g de 12 enteros

Lenguaje C++
Punteros
Arreglos de punteros : ejemplo
Se desea ordenar las lneas de un texto de diferente longitud como se
muestra en la figura. Escriba las lneas de cdigo que realizan esta
operacin.

Sol

Sol

Mara

Luis

Luis

Mara

Lenguaje C++
Punteros
Arreglos de punteros : ejemplo
1.- Guardar todas las lneas en un arreglo de tipo char grande.
2 Guardar los apuntadores en un arreglo diferente donde cada puntador
2.apunta al primer carcter de cada lnea
3. Comparar dos lneas usando la funcin de la biblioteca estndar
strcmp().
4. Si dos lneas estn desacomodadas intercambiar los apuntadores (no el
texto).
p[0]

S l
Sol

p[1]

Mara

p[1]

p[2]

Luis

p[2]

strcmp

p[0]

You might also like