Transcript POO-C++

INTRODUCCIÓN AL
LENGUAJE C++
2
Entrada y Salida
 En C++ la Entrada y Salida de datos se realiza a
través de operaciones de flujos (streams).
 Estos flujos están definidos en la librería
iostream.h que deberá ser incluída en el
programa.
3
Salida: cout
 cout corresponde al flujo de SALIDA.
 Normalmente corresponde a la pantalla del
usuario.
 El operador de insercción, <<, inserta datos en
el flujo cout. Por ejemplo:
cout<< “Mensaje de prueba “;
cout<< 500<<600<<700
int i=5, j=10,m=100;
cout<< "El valor de i es:"<<i << j
<< m;
4
Salida: Formato
 cout.setf(ios::fixed) Imprime en
punto fijo (scientific es el estándar)
formato
 cout.setf(ios::showpoint) Imprime mostrando
el punto decimal.
 cout.precision(n) Cantidad de decimales de
precisión
 cout.width(n) Espacios para mostrar un valor.
 cout.setf(ios::right) Justifica el texto a
imprimir a la derecha. (left)
5
Entrada: cin
 Proporciona un flujo de entrada.
 El operador de extracción >>, extrae
valores del flujo y lo almacena en
variables.
 Normalmente el flujo de entrada es el
teclado.
int numero1, numero2;
cin>>numero1;
cin>>numero2;
6
Ejercicio:
Ingresar 2 edades y
determinar quién es mayor
#include <iostream.h>
void main()
{ cout << "Ingrese su edad: ";
int miEdad;
cin >> miEdad;
cout << "Ingrese la edad de un amigo: ";
int suEdad;
cin >> suEdad;
if (miEdad < suEdad)
cout << "Yo soy menor que mi amigo \n ";
else
if (miEdad > suEdad)
cout << "Mi amigo es menor que yo \n ";
else
cout << "Mi amigo y yo tenemos la misma edad \n ";
}
7
Tipos de Datos
ELEMENTALES
8
Tipos de Datos: Numéricos
Tipo
Ejemplo
Bytes
Rango
char
‘a’
1
0..255
short
-15
1
-128..127
int
1024
2
-32768..32767
long
262144
4
-2147483648..2147483637
float
10.5
4
3.4*10E-38.3.4*10E308
double
0.00045
8
1.7*10E-308..1.7*10E308
9
Punteros
 Una variable que puede almacenar una
dirección de memoria se llama puntero.
 Una variable de tipo puntero puede
guardar direcciones de variables de un
tipo determinado: punteros a int, double,
char, etc.
10
Declaración de punteros
tipo *nombre_variable;
int i=3, *p,*r;
double d=3.3,*q;
char* c='a', *t;
// p y r son punteros a entero
// q es un puntero a double
// t es un puntero a carácter
 p=&i;
 r=p;
 p = q; es un ERROR porque son punteros de
diferente tipo.
11
Otras operaciones con punteros





cin>>*p;
if (p==r)
cout<<"El valor de i es: "<<*p;
*p=*p+3;
p=p+3;
12
Mostrar una dirección
Es posible mostrar el una dirección como
valor de una variable de tipo puntero, o la
dirección de cualquier variable, en la pantalla
utilizando un cout.
cout << “p = “ << p << endl;
cout << “&n = “ << &n << endl;
cout << “&p= “ << &p << endl;
13
Ejemplo Ilustrativo
1. int *p, *q, a=5
p ?
p
q ?
a:
2. p=&a
q
a:
5
a:
p
8
q ?
q ?
5
4. q=p;
p
3. *p=8;
5. *q=85;
a:
8
p
q
a:
85
14
Ejemplo Ilustrativo
6. a=33;
. 7. int b=1;
a:
p
33
q
a:
p
b:
q
. 8. q=&b;
p
a:
q
b:
33
1
NOTA
9
1
a,b,p,q : variables locales
automáticas
15
Ejemplo 1:
void main()
{ int x, y, *p, *q;
p = &x;
*p = 5;
q = &y;
*q = 23;
cout << *p << " “ << *q << endl;
q = p;
*p = 35;
cout << *p << " “ << *q << endl;
q = NULL;
cout << x << " “ << y << endl;
}
16
Ejemplo 2:
void main()
{
int *p, *q, x, y;
p = &x;
*p = 14;
q = p;
cout << *p << " " << *q << endl;
q = NULL;
cout << x << " “ << y << endl;
}
17
Ejemplo 3:
void main()
{ int x, y, *p, *q;
p = &x;
*p = 12;
q = &y;
*q = 23;
cout << *p <<" "<<*q<<endl;
*p = *q;
cout << *p <<" "<<*q<<endl;
q = NULL;
cout<<*p<<endl;
cout<<x<<" "<<y<<endl;
}
18
Ejemplo 4:
void main()
{ int x, y, *p, *q;
p = &x;
*p = 14;
q = p;
if ( p == q)
q = &y;
if ( p == q)
*q = 14;
if (p == q)
if (*p == *q)
}
cout<<"Mensaje 1";
cout<<"Mensaje 2";
cout<<"Mensaje 3";
cout<<"Mensaje 4";
Tipos enumerados
 enum Frutas {Manzana, Pera, Guinda, Kiwi,};
 enum Color {Rojo=10, Verde, Azul};
 enum Raza {Pastor, Cooker, Poodle, Setter, Collie};
void main()
{Color c=Verde;
if (c==Verde)
cout<<"Color VERDE";
}
19
20
Tipos de Datos
ESTRUCTURADOS
21
Tipos de Datos: Arreglos
 Permite definir variables estructuradas
homogéneas.
 Vectores o Arreglos Unidimensionales
int v[10];
int v[10]={41,23,87,19,-9};
int v[]={41,23,87,19,-9,91,103,25,11,22};
0
v:
1
41 23
2
3
4
87 19 -9
5
6
7
8
9
91 103 25 11 22
cout<<v[3];
22
Tipos de Datos: Matrices
 Matrices o Arreglos Bidimensionales
0
float a[5][3];
int x[5][3]={{33,21,47},
{82,91,95},
{50,72,45},
{36,79,63},
1
2
0
33
21
47
1
82
91
95
2
50
72
45
3
36
79
63
4
53
60
74
{53,60,74}}
cout<<a[3][2];
23
Tipos de Datos: Strings
 Strings: Vector de caracteres, que termina
con el caracter NULO: '\0'
char s[5];
char s1[5]={'h','o','l','a','\0'};
char s2[5]="hola";
char s3[]="hola";
typedef char String[5]
String s;
24
Tipos de Datos: Strings
 La lectura de un String
cin>>s;
 Lee del flujo de entrada un string.
 Deja para la siguiente lectura el '\n'
 No reconoce el espacio inicial en las entradas
i=1;
do
{
cin>>s;
cout<<i<<": "<<s<<endl;
i++;
}
while (i<5);
Ingresar:
Este es un ejemplo
25
Tipos de Datos: Strings
 La lectura de un String
cin.getline(s, largo);
 Lee del flujo de entrada un string de largo
caracteres.
 La lectura termina:
 Con la línea ('\n'), si la cantidad de caracteres es
menor que largo.
 Cuando se extraído la cantidad largo de caracteres,
aunque NO haya terminado la línea.
26
Tipos de Datos: Strings
 La lectura de un String
i=1;
do
{
cin.getline(s,20);
cout<<i<<": "<<s<<endl;
i++;
}
while (i<5);
27
Tipos de Datos: Strings
 Funciones de strings
strlen(string);
strcpy(destino,origen);
strcmp(string1, string2);
0: Si string1 ==string2
1: Si string1 > string2
-1: Si string1 < string2
28
Tipos de Datos: Strings
#include <iostream.h>
#include <string.h>
void main()
{char x[5];
char y[]="Hola";
strcpy(x,y);
cout<<"x:"<<x<<endl;
cout<<"y:"<<y<<endl;
29
Tipos de Datos: Strings
#include <iostream.h>
#include <string.h>
void main()
{char *x;
char y[]="Hola";
x=new char[strlen(y)+1];
cin.getline(x,20);
cout<<"x:"<<x<<endl;
cout<<"y:"<<y<<endl;
}
30
Tipos de Datos: Strings
#include <iostream.h>
#include <string.h>
void Copiar(char a[], char b[])
{strcpy(a,b);}
void main()
{char *x;
char y[]="Hola";
x=new char[strlen(y)+1];
Copiar(x,y);
cout<<"x:"<<x<<endl;
cout<<"y:"<<y<<endl;
31
Tipos de Datos: Strings
#include <iostream.h>
#include <string.h>
void Copiar(char *a, char *b)
{strcpy(a,b);}
void main()
{char *x;
char y[]="Hola";
x=new char[strlen(y)+1];
Copiar(x,y);
cout<<"x:"<<x<<endl;
cout<<"y:"<<y<<endl;
32
Tipos de Datos: Strings
#include <iostream.h>
#include <string.h>
char *Mayor(char a[], char *b)
{if (strcmp(a,b)>0)
return a;
return b;
}
void main()
{char *x;
char y[]="Hola";
x=new char[strlen(y)+1];
cin.getline(x,20);
cout<<"El mayor: "<<Mayor(x,y);
}
33
Tipos de Datos: Estructuras
 Constructor de tipos de dato que permite
agrupar elementos de diversos tipos de
datos como UNA variable.
struct
{int RUT;
char nom[10];
float prom;
} Persona;
Persona a;
RUT
nom
a:
cout<< a.prom;
prom
34
Tipos de Datos: Estructuras
struct
{int hh;
int mm;
int ss;
} Hora;
Hora h, v[10], *p;
h.hh=8;
p=&h;
v[3].hh= 5;
v[7]=(*p).hh;
cout <<p->hh << h.hh<<v[7].hh
35
Nuevos Tipos de Datos
typedef int Vector[10];
typedef float Matriz[5][3];
Vector v;
Matriz a;
typedef enum Boolean {FALSE, TRUE};
enum Color {Rojo, Verde, Azul, Amarillo}
typedef struct Persona
{ char paterno[10];
char materno[10];
char nombre[10];
};
36
Nuevos Tipos de Datos
typedef union Numero
{ int i;
float f;
};
Vector v;
// int v[10];
Boolean sw = FALSE;
Persona alumno;
Numero x;
37
OBJETOS CONSTANTES
38
Objetos Constantes
 Se definen mediante el prefijo const.
 Estos objetos NO puede ser modificada
por asignación.
 Sólo se permite su inicialización.
const int x;
x = 7;
// error: x debe ser inicializada
// error: x no puede ser
modificada por asignación
const int z = 3;
cout << z << '\n';
39
FUNCIONES
40
Definición
Tipo de retorno Nombre ( Parámetros )
{ declaraciones locales
}
Instrucciones
 Las funciones no se pueden anidar.
 Todas las funciones son externas, se pueden
llamar desde cualquier punto del programa.
41
Prototipo de funciones
#include <iostream.h>
void f1();
void f2(void);
void main()
{ f1();
f2();
}
void f1()
{cout << "Función sin argumentos \n"; }
void f2(void)
{cout << "Función también sin argumentos \n"; }
42
Tipos de retorno
 Si la función no devuelve un valor int, se debe
especificar el tipo de dato devuelto:
char, double, float
 También puede retornar un UN PUNTERO.
 Puede no retornar valores (void).
 Puede retornar una referencia: (ALIAS)
<tipo>& Nombre(parámetros)
43
Declaración (prototipo)
Tipo_de_retorno Nombre ( Parámetros );
 Se pueden omitir los nombres de los parámetros
y dejar solamente los tipos.
 No es necesario declarar las funciones si las
definimos antes de usarlas.
44
Variables locales y globales
Una variable que se declara fuera de las
funciones es una variable global y puede ser
utilizada dentro de todas las funciones del
programa.
Una variable que se declara dentro de una
función es una variable local y solamente
puede ser utilizada dentro de dicha función.
Al terminar la ejecución de la función
desaparece.
45
Parámetros
Parámetros Formales
 Son los que se escriben al definir y/o declarar
la función.
Parámetros Actuales
 Son los que se escriben al llamar la función.
Argumentos.
 Los parámeros actuales se usan para dar valor
inicial a los parámetros formales o para
recibir valores desde las rutinas.
46
Parámetros actuales
Los parámetros actuales pueden ser:
Valores
Variables
Expresiones.
Ejemplo:
total = CalcArea(20,
4);
L = 30;
A=12;
total =
CalcArea(L,A+2);
47
Formas de Parametrización
Parámetros por Valor
Al llamar a la función se copia valor del parámetro actual en
el parámetro formal.
El parámetro formal se inicializa con el valor de parámetro
actual.
La función trabaja con una copia, por lo tanto:
No modifica el valor de la
variable o parámetro actual.
LLAMADA
Ejemplo(a);
Ejemplo(a+1);
Ejemplo(4);
DEFINICIÓN
void Ejemplo(int x)
48
Formas de Parametrización
Parámetros por Referencia
 Se pasa la dirección del parámetro actual al parámetro
formal
 El parámetro actual es ALIAS del parámetro formal
 La función puede cambiar su valor.
LLAMADA
Ejemplo(a);
DEFINICIÓN
void Ejemplo(int&x)
49
Ejemplo: Por referencia
void Ejemplo(int a, int &b);
void main( )
{int x = 2, y = 4;
Ejemplo(x, y);
cout<<x<< “ “<<y<<endl;
}
void Ejemplo (int a, int &b)
{ a = 5;
b = 8;
}
50
Ejemplo:
 Escriba una función que calcule el cuadrado y el cubo
de un número entero.
 Éstos resultados se DEBEN retornar como
parámetros.
51
Ejemplos: Prototipos
#include <iostream.h>
int cuadPorVal(int);
void cuadPorInd(int *);
void cuadPorRef(int &);
52
Ejemplos
void main()
{ int x = 2, y = 3, z = 4;
cout << "Por valor : x = " << cuadPorVal(x) << '\n';
}
cuadPorInd(&y);
cout << "Por indirección : y = " << y << '\n';
cuadPorRef(z);
cout << "Por referencia : z = " << z << '\n';
53
Ejemplos
int cuadPorVal(int a)
{return a = a*a; }
void cuadPorInd(int *b)
{*b = (*b) * (*b); }
void cuadPorRef(int &c)
{c = c*c; }
Prototipos de
funciones
#include <iostream.h>
void f1();
void f2(void);
main()
{
f1();
f2();
return 0;
}
void f1()
{ cout << "Función sin argumentos \n"; }
void f2(void)
{ cout << "Función también sin argumentos \n"; }
54
55
Funciones en línea
La cláusula inline sugiere al compilador la
generación de una copia del código de esa
función "in situ" (cuando sea apropiado), a
fin de evitar una llamada.
Esta sugerencia es generalmente acogida en
el caso de funciones pequeñas.
56
Funciones inline
inline float cubo(float x)
{ return x*x*x; }
void main()
{ cout << "Ingrese el largo del lado de un cubo: ";
float lado;
cin >> lado;
cout << "Volumen del cubo de lado "
<< lado << " es " << cubo(lado) << '\n';
}
57
Memoria Dinámica
int *p;
p = new int;
:::
delete p;
int q=new int(3);
float t=new float(2,2);
:::
delete q;
58
Ejemplo Ilustrativo
1. int *p, *q;
2. p=new int;
p ?
p
q ?
q ?
4. q=p;
p
q
3. *p=10;
?
p
10
q ?
5. *q=85;
10
p
q
85
59
Ejemplo Ilustrativo
5. *q=85;
p
. 6. p new ( int);
85
q
. 7. *p= 9;
p
9
q
85
p
?
q
85
60
Ejemplo Ilustrativo
p
q
8. delete q;
85
p
9
q
85
9. delete q;
p ?
p
q ?
q ?
9
61
Memoria Dinámica
typedef struct
{int num;
float saldo;
}Cuenta;
Cuenta *c;
c=new Cuenta;
62
Memoria Dinámica
int *v;
v = new int [100];
delete [] v;
// crea un arreglo dinámico de 100 int
// libera la memoria dinámica ocupada por v
63
Resolución de alcance
Operador ::
float x = 1.23;
void main()
{int x = 7
cout << "x local = "<< x <<endl;
cout << "x global = " << ::x << endl;
}
64
Sobrecarga de funciones
Funciones con igual nombre pero se
diferencian, a lo menos, en uno de los
siguientes puntos:
El tipo de dato de la función
La lista de parámetros
 Cantidad de parámetros
 Tipo de datos de los parámetros
65
Sobrecarga de funciones
float cuadrado(int k)
{ return k*k; }
float cuadrado(float x)
{ return x*x; }
void main()
{cout << "El cuadrado del entero 7 es " << cuadrado(7);
cout << "El cuadrado del real 1.2 es " << cuadrado(1.2);
}