Académique Documents
Professionnel Documents
Culture Documents
C vs. C++
C es un lenguaje procedural el elemento central del
Constantes literales
bool: true, false
char: a,
string: hola
int: 15, 15u (unsigned), 017 (octal), 0xf (hexadecimal)
long: 15L
float: 15.0F
double: 15.0, 3e2
Declaracin de variables
<Tipo> <identificador> (=valor inicial)
char caracter = '.';
int numerito = 9;
Identificadores:
Han de comenzar por carcter alfabtico
Se distingue entre maysculas y minsculas.
No puede coincidir con una palabra reservada
Palabras reservadas
mbito de variables
Operadores (I)
Aritmticos
Relacionales
Lgicos
a+b
a == b (igualdad)
a && b (AND)
a-b
a != b (desigualdad)
a || b (OR)
a*b
!a (NOT)
a/b
a % b (mdulo)
a|b
~a
a^b
a <<b
a>>b
Operadores (II)
Asignacin
var = exp
var += exp
Equivale a: var = var + exp
Referencia
Entrada y salida
[] (miembro de array)
. (miembro de clase)
Directivas de inclusin
Espacios con nombre
Espacio global
Comentarios
Ejemplos de directivas:
#include <ctime>
#include <cstdlib>
#include <string>
10
Concepto de CLASE
Alumno.cpp
#include "Alumno.h"
#include <iostream>
using namespace std;
Alumno.h
#include <string>
using namespace std;
#ifndef ALUMNO_H_
#define ALUMNO_H_
class Alumno {
public:
int numMatricula;
string nombre;
Operador de resolucin
de visibilidad
Variables
miembro
Prueba.cpp
#include "Alumno.h"
#include <iostream>
using namespace std;
//constructor
Alumno::Alumno(int num, string nom){
numMatricula = num;
nombre = nom;
}
//destructor
Alumno::~Alumno() {
}
int main(void){
//se crean objetos de la clase alumno
Alumno a1 (3041, "Antonio");
Alumno a2 (2054, "David");
cout << "nombre del primer alumno " << a1.nombre << endl;
cout << "nombre del segundo alumno " << a2.nombre <<endl;
}
11
Memoria Dinmica
Datos estticos: su tamao y forma es constante
12
Memoria Dinmica
PUNTERO: nos permite referenciar datos dinmicos.
Declaracin de punteros:
typedef int * PtrInt;
PtrInt mypointer;
O bien, directamente
int * mypointer;
13
Memoria Dinmica
PUNTERO
Gestin de memoria dinmica:
#include <iostream>
using namespace std;
int main () {
int * mypointer;
//reserva de memoria de forma dinmica
mypointer = new int;
//inicializacin
*mypointer = 10;
cout << mypointer is " << *mypointer << '\n';
//se libera memoria
delete mypointer;
}
mypointer
(memoria esttica)
posicin de memoria
indefinida
basura
basura
Tras el NEW
mypointer
0xdir
memoria dinmica
basura
Tras la asignacin
mypointer
0xdir
memoria dinmica
10
14
Memoria Dinmica
PUNTEROS
Gestin de memoria dinmica :
#include "Alumno.h"
#include <iostream>
using namespace std;
Alumno.cpp
//constructor
[]
//destructor
[]
pAlumno
posicin de memoria
indefinida
basura
basura
Prueba.cpp
#include "Alumno.h"
#include <iostream>
using namespace std;
int main(void){
Alumno *pAlumno;
//reserva memoria de forma dinmica y creacin objeto Alumno
pAlumno = new Alumno(1111, "Pepe");
cout << "matricula alumno " << pAlumno->numMatricula << endl;
cout << nombre alumno " << pAlumno->nombre << endl;
//se libera memoria
delete pAlumno;
}
pAlumno
0xdir
:Alumno
numMatricula = 1111
Nombre = Pepe
15
Memoria Dinmica
PUNTERO
Operaciones con punteros:
memoria esttica
0x 28FED0
#include <iostream>
using namespace std;
0x 28FED4
int main () {
int myvar;
int * mypointer;
mypointer = &myvar;
*mypointer = 10;
cout << "myvar is " << myvar << '\n';
}
mypointer
0x 28FED8 0x 28FEE0(16
0x 28FEDC
myvar
0x 28FEE0
10 (10
Operador de direccin
(address-of operator)
Operador de indireccin
(dereference operator)
16
Memoria Dinmica
PUNTERO
Operaciones con punteros:
17
Memoria Dinmica
PUNTEROS
Alumno.cpp
Prueba.cpp
p1
Alumno1
numMatricula = 3041
nombre = Antonio
#include "Alumno.h"
#include <iostream>
using namespace std;
//constructor
Alumno::Alumno(int num, string nom){
numMatricula = num;
nombre = nom;
}
//destructor
Alumno::~Alumno() {
}
#include "Alumno.h"
#include <iostream>
using namespace std;
int main(void){
//se crean objetos de la clase alumno
Alumno a1 (3041, "Antonio");
Alumno a2 (2054, "David");
cout << "nombre del primer alumno " << a1.nombre << endl;
cout << "nombre del segundo alumno " << a2.nombre << endl;
Alumno *p1, *p2;
p1 = &a1;
p2 = &a2;
cout << "matricula primer alumno " << p1->numMatricula << endl;
cout << "matricula segundo alumno " << p2->numMatricula << endl;
}
18
19
pAlumno1
Alumno1
pAlumno2
3041
3041
Antonio
Antonio
pnew
Alumno2
cambiarValorObjetoApuntado(pAlumno1, pAlumno2);
cout << "matricula primer alumno " << pAlumno1->numMatricula << endl;
2054
David
}
//se pasa por valor (una copia) la direccin de memoria a la que apunta p
//se pasa por referencia el objeto apuntado
void cambiarValorObjetoApuntado(Alumno *p, Alumno *newp){
p->numMatricula = 0;
p = newp; //No surte efecto. El valor de la direccin NO se modifica
}
pAlumno1
Alumno1
0
Antonio
20
p/pAlumno1
Alumno1
pAlumno2
3041
Antonio
pnew
cambiarDireccionObjetoApuntado(pAlumno1, pAlumno2);
cout << "matricula primer alumno " << pAlumno1->numMatricula << endl;
}
Alumno2
2054
David
p / pAlumno1
21
Entrada/salida
Librera iostream
Entrada:
Representa al dispositivo de entrada por defecto, generalmente el teclado.
El stream asociado es cin, de la clase istream.
Salida:
Representa al dispositivo de salida por defecto, generalmente la pantalla.
El stream asociado es cout, de la clase ostream.
Salida de error:
Representa al dispositivo de salida por defecto donde se envan los mensajes de
error, generalmente la pantalla.
Los streams asociados son cerr y clog, de la clase ostream.
Operadores:
Insercin <<
Extraccin >>
22
Salida: cout
\t
\\
Formateo de la salida:
precision: nmero de cifras despus de la coma
width: nmero de caracteres mnimo del output
fill: indica el carcter de relleno
left: siguiente nmero en el extremo izquierdo
right: siguiente nmero en el extremo derecho
ios::fixed: formato de punto fijo
ioss:showpoint: incluye el punto decimal en nmero de coma
flotante
23
Ejemplo
24
Entrada: cin
Flujo estndar
Operador >> sobrecargado para tipos estndar en c++ y
25
Tratamiento de ficheros
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
int main () {
ofstream salida ("ficherito");
//FICHERO DE ESCRITURA
for (int i = 1; i < 20; i++)
salida << setw(20) << setiosflags(ios::left) << setfill('.') << "Lin. " << i << endl;
salida.close ();
ifstream lectura;
string s;
lectura.open ("ficherito");
while (getline (lectura, s))
cout << s << endl;
lectura.close ();
return 0;
}
//FICHERO DE LECTURA
26
Arrays (I)
Declaracin
const int TOTAL = 45;
float mediaCalificaciones [TOTAL];
float notasParciales [TOTAL] [2];
28
Arrays (II)
El nombre del array es un puntero constante al primer
elemento:
int array[10];
int *p; //puntero a entero
p = array; //asigna a p la direccin del primer elem de array
*p = 6;
//igual que array[0]=6
cout << *p << " at " << p << endl;
p++;
//suma a p sizeof(int) y lo posiciona en &array[1]
cout << *p << " at " << p;
29
Arrays (III)
de ejecucin
int main () {
int n;
cout << "Tamao del array: " << endl;
cin >> n;
int *miarraydinamico ;
miarraydinamico = new int [n]
for (int i = 0; i < n; i++)
miarraydinamico [i] = i;
for (int i = 0; i < n; i++)
cout << miarraydinamico[i] << " ";
cout << endl;
return 0;
}
30
Arrays (IV)
int main () {
int n;
cout << "Tamao de la matriz: " << endl;
cin >> n;
int **matriz = NULL;
//Matriz dinmica de n*n
matriz = new int *[n];
//Array de filas
for (int i = 0; i < n; i++)
matriz [i] = new int [n];
//Completo el vector
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matriz [i] [j] = i*j;
cout << matriz [i] [j] << " ";
}
cout << endl;
}
return 0;
}
31