Tema 2: de C A C++. Introducción y Conceptos.: Declaraciones Frente A Definiciones
Tema 2: de C A C++. Introducción y Conceptos.: Declaraciones Frente A Definiciones
es)
#include <stdio.h>
1
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
#include <stdio>
El primer programa en C++
int main() {
cout << “Hola C++ ” << endl;
}
g++ nombrefichero.cxx
2
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
iostream
cout << “un número en decimal “ << dec << 15 << endl;
cout << “un número en octal “ << oct << 15 << endl;
cout << “un número en hexadecimal “ << hex << 15 <<
endl;
int main() {
int number;
cout << “dime un número: “ ;
cin >> number;
cout << “el valor es: “ << number << endl;
}
Utilizando strings
El C++ ofrece una clase string diseñada para tratar con este tipo
de datos de forma sencilla. Para ello sólo debemos incluir el header
<string>. Debemos utilizar el namespace std para poder hacer uso
de la misma.
int main() {
string s1, s2; // declaración de dos strings.
string s3 = “Hola, puedo ser asignado”;
3
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
Para poder tratar con ficheros de entrada y salida hay que utilizar:
<fstream> e <iostream>.
int main() {
ifstream in(“ficheroleer.txt”);
ofstream out(“filesalida.txt”);
string s;
while(getline(in,s)) // descarta el caracter de nueva línea
out << s << “\n”;
}
Utilización de vectores.
4
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
//
//test con vector y muestra de algunas de sus utilidades.
//
#include <string>
#include <iostream>
#include <fstream>
#include <vector>
int main() {
vector<string> v;
ifstream in(“fichero.txt”);
string line;
while(getline(in, line))
v.push_back(line); // método que añade contenido de line.
for(int i = 0; i < v.size(); i++)
cout << i << ”: “ << v[i] << endl;
}
char func(int i) {
return 'a';
}
int main() {
int val;
cin >> val;
cout << func(val) << endl;
}
5
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
if-else
if(expresión) if(expresión)
ejecuta; ejecuta1;
else
ejecuta2;
while
while(expresión) {
ejecuta;
}
do-while
do {
ejecuta;
} while (sentencia);
for
break/continue
Sale del bucle / vuelve a comenzarlo.
switch
switch(selección) {
case valorentero1 : sentencia ; break
case valorentero2 : sentencia2; break
.....
default: sentencia por defecto;
}
Introducción a operadores
6
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
i++ = i +1;
++i = (i+1); (se realiza primero la operación).
i-- = i-1;
--i = (i-1); (se realiza primero la operación).
#include <iostream>
using namespace std;
void f(int a) {
cout << “el valor de entrada es: “ << a << endl;
}
int main() {
int s;
cout << (long)&f << endl; // dirección de memoria de f
cout << (long)&s << endl; // dirección de memoria de s
}
7
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
función f.
En vez de
int* a;
int* b;
int* c;
8
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
//
// Test con funciones y punteros.
#include<iostream>
using namespace std;
void f(int a) {
cout << “a: “ << a << endl;
a = 5;
cout << “a: “ << a << endl;
}
int main() {
int x=47;
cout << “x= “ << x << endl;
f(x);
cout << “x= “ << x << endl;
}
//
//Test utilizando funciones con paso por puntero.
//
#include <iostream>
using namespace std;
void f(int* p) {
cout << “p= “ << p << endl;
cout << “*p = “ << *p << endl;
*p = 5;
cout << “p= “ << p<< endl;
}
int main() {
int x=47;
cout << “x= “ << x <<endl;
9
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
void f(int& r) {
cout <<”r = “ << r << endl;
cout << “&r= “ << &r << endl;
r=5;
cout << “r = “ << r << endl;
}
int main() {
int x=47;
cout << “x= “ << x << endl;
cout <<”&x= “ << &x <<endl;
f(x); // la llamada es parecida al paso por valor:cool!!
cout << “x= “ << x << endl;
}
10
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
//
// Test con void.
//
#include <iostream>
using namespace std;
int main() {
void* v;
char c;
int i;
float f;
double df;
v=&c;
v=&i;
v=&f;
v=&df;
}
11
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
//
// Test utilizando static
//
#include <iostream>
using namespace std;
void f() {
static int i = 0;
cout << i << endl;
}
int main() {
for (int x=0; x < 10; x++)
f();
}
12
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
//
// Test con struct
//
struct Estructura1 {
char c;
int i;
floa f;
double d;
}; // importante acabar con “;”.
int main() {
struct Estructura1 s1, s2;
s1.c = 'a'; // forma de acceder a los componentes de s1.
s1.i=1;
s1.f= 3.14;
s1.d=0.000017;
13
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
int main() {
Estructura1 s1;
.....
.....
}
//
// Test con los punteros a estructuras.
//
typedef struct Estructura1 {
char c;
int i;
float f;
double d;
}
int main() {
Estructura1 s1, s2;
Estructura1* sp = &s1;
sp->c = 'a';
sp->i=1;
sp->f=3.14;
sp->d=0.0007;
}
Arrays.
14
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
a[5]=7;
// Test arrays.
int main() {
int a[10];
int* p=a; // apunta a a[0], o sea &a[0]
for(in i =1; i<10;i++)
p[i]=i*10;
}
15
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
int main() {
int a[5], b[5];
// valore aleatorios.
print(a, “a”, 5);
print(b,”b”,5);
//
func1(a,5);
func1(b,5);
print(a, “a”, 5);
print(b,”b”,5);
//
func2(a,5);
func2(b,5);
print(a, “a”, 5);
print(b,”b”,5);
}
16
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
int d[10];
int* p = d;
p++; //se desplaza al siguiente elemento del array.
Debugging.
17
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
//
bool debug = false;
int i = 100;
assert(i != 100); // para la ejecución
18
Programación Avanzada Miguel A. Rodríguez Florido ([email protected])
#Comentarios.
#Macros: definiciones de flags, que se llaman con $
CXX = g++
OFLAG = -o
#Definicion de las extensiones de los ficheros a chequear.
.SUFFIXES : .o .cxx
test: testvector.o
$(CXX) $(OFLAG) test testvector.o
testArray: testArray.o
$(CXX) $(OFLAG) testArray testArray.o
testdebug: testdebug.o
$(CXX) $(OFLAG) testdebug testdebug.o
testvector.o: testvector.cxx
testArray.o: testArray.cxx
testdebug.o: testdebug.cxx
19