Mejoras menores de C++ respecto de C Comentarios de línea

Anuncio
Programación en C++
Mejoras menores de C++
respecto de C
Prof. José A. Rodríguez Mondéjar
Prof. Álvaro Sánchez Miralles
UPCO ICAI Departamento de Electrónica y Automática 1
Programación en C++
Comentarios de línea
•
•
•
Desde // hasta que acaba la
línea se considera
comentario.
Se recomienda utilizar
siempre // para los
comentarios.
Sólo utilizar /* */ para
comentar código en caso de
necesidad.
– Entre /* */ puede haber
comentarios de línea y
viceversa.
int i;
Compilador: OK
/*
fprintf(pfic,"%s\n",p->sNom);
fprintf(pfic,"%d\n",p->nHijos);
// Recorrer hijos
for(i=0;i<p->nHijos;i++)
ArbolGenSalva(pfic,p->pHijos+i);
*/
int i;
Compilador: Error
/*
fprintf(pfic,"%s\n",p->sNom);
fprintf(pfic,"%d\n",p->nHijos);
/* Recorrer hijos */
for(i=0;i<p->nHijos;i++)
ArbolGenSalva(pfic,p->pHijos+i);
*/
Prof. José A. Rodríguez Mondéjar
Prof. Álvaro Sánchez Miralles
UPCO ICAI Departamento de Electrónica y Automática 2
Programación en C++
Ámbito (scope) de las variables
•
•
Las variables pueden ser
declaradas en cualquier punto
del programa:
– No sólo al principio del programa.
main () {
int i=1;
printf("%d\n",i);
Ámbito de una variable
– Una variable existe desde su
declaración hasta la llave de cierre
del bloque de código donde ha
sido declarada. La llave anterior
más cercana de apertura a la
declaración de la variable define el
inicio del bloque de código.
– Fuera de ese bloque la variable no
existe si no lleva un modificador
especial.
– Problema con los for
i
int j=2;
printf("%d\n",j);
j
{
int k=-2;
printf("%d\n",k);
k
}
for (int k=0;k<2;k++) {
printf("%d\n",k);
}
getchar();
k
}
• ¿k pertenece al interior o al
exterior? En general al interior
Prof. José A. Rodríguez Mondéjar
Prof. Álvaro Sánchez Miralles
UPCO ICAI Departamento de Electrónica y Automática 3
Programación en C++
Modificador de tipo const (type modifier)
•
•
•
El valor de la variable
dado en la
inicialización
permanece
constante.
En los punteros se
puede especificar
como constante:
– El puntero
– A lo que apunta el
puntero.
– Tanto puntero como
a lo que apunta.
Util para pasar
valores a funciones
que no se quieren
modificar.
Prof. José A. Rodríguez Mondéjar
Prof. Álvaro Sánchez Miralles
const int LON=5;
char s[LON];
LON no se puede modificar
const char *ps1=s;
s[0]='\0';
ps1++;
*ps1='\0';
Se puede modificar ps1
No se puede a lo que apunta
char * const ps2=s;
ps2[0]='\0';
Se puede modificar
a lo que apunta
ps2++;
No se puede modificar
const char * const ps3=s;
ps3++;
ps3[1]='\0';
No se puede modificar nada
UPCO ICAI Departamento de Electrónica y Automática 4
Programación en C++
Paso por referencia: ¡¡ POR FIN !!
•
•
•
•
•
Se puede modificar desde
dentro de una función una
variable externa sin necesidad
de pasar el puntero a dicha
variable.
& indica que lo que se pasa a la
función no es el valor de
variable, sino la propia variable.
Toda referencia a la variable
dentro de la función repercute
directamente sobre la variable
externa.
La misma variable es manejada
dentro de la función pero con
un nombre diferente (alias).
Limita el uso de los punteros a
lo estrictamente necesario.
Prof. José A. Rodríguez Mondéjar
Prof. Álvaro Sánchez Miralles
void swap(int &, int &);
main () {
int i1=1;
int i2=2;
No paso su valor,
sino su referencia
swap(i1,i2);
}
No se crea una nueva variable,
i es ahora el alias de i1
void swap(int &i, int &j){
int t;
t=i;
i=j;
j=t;
Leo i1 directamente
Modifico i1 directamente
}
UPCO ICAI Departamento de Electrónica y Automática 5
Programación en C++
Más sobre el tipo referencia (&)
•
•
•
•
Declara un nuevo nombre
para hacer referencia a una
variable ya declarada:
– Es simplemente un alias de
una variable.
– La inicialización conecta el
alias con la variable elegida.
Sólo cuando se utiliza en la
declaración de una variable
funciona como referencia.
Fuera de las declaraciones
& funciona como operador
para calcular la dirección de
una variable.
En las funciones, la
inicialización se da en la
llamada a la función.
Prof. José A. Rodríguez Mondéjar
Prof. Álvaro Sánchez Miralles
j hace referencia
a la misma variable
que i
main()
{
int i=5;
int &j=i;
int &k;
Falta la
inicialización:
hay que hacer
printf("%d",j); referencia a una
variable que
ya exista
}
5
UPCO ICAI Departamento de Electrónica y Automática 6
Programación en C++
Más sobre el paso por referencia (&)
•
Utilizar el modificador const si no se quiere modificar la
variable desde dentro de la función la variable.
int iSuma(const int &i, const int &j);
main ()
int
int
int
{
i1=1;
i2=2;
i3;
1+2=3
i3=iSuma(i1,i2);
printf("%d + %d = %d",i1,i2,i3);
}
int iSuma(const int &i, const int &j){
return i+j;
}
Prof. José A. Rodríguez Mondéjar
Prof. Álvaro Sánchez Miralles
UPCO ICAI Departamento de Electrónica y Automática 7
Programación en C++
Operadores new y delete
•
•
Sustituyen a calloc y free
en la gestión de memoria
dinámica
– Al ser operadores, la gestión de
memoria forma parte del propio
lenguaje.
main () {
int *pi;
pi=new int;
Dos tipos de utilización:
double *pd=new double;
– Para un solo elemento
• new
• delete
delete pd;
delete pi;
– Para un vector de elementos
•
char *ps=new char[10];
• new[ tam ]
• delete [ ]
Para más adelante: new y
delete utilizan el
constructor y el destructor de
un objeto.
Prof. José A. Rodríguez Mondéjar
Prof. Álvaro Sánchez Miralles
delete [ ] ps;
}
UPCO ICAI Departamento de Electrónica y Automática 8
Programación en C++
Sobrecarga de funciones (del nombre de una función)
•
•
•
int Max(int *pi);
double Max(double *pd);
Se pueden utilizar el mismo
nombre para diferentes
funciones que tengan diferente
tipo o número de parámetros.
– No vale para funciones que sólo
tengan distinto el tipo de la
función.
– El funcionamiento es semejante a
como el operador + puede
funcionar entre enteros, doubles,
etc.
Muy útil para funciones que
realizan operaciones
semejantes sobre datos
diferentes.
No se debe utilizan con
funciones con
comportamientos diferentes
main() {
int i;
double d;
Sobre doubles
Sobre enteros
Max(&d);
Max(&i);
}
int Max(int *pi) {
printf("Sobre enteros\n");
return 0;
}
double Max(double *pd) {
printf("Sobre doubles\n");
return 0;
}
Prof. José A. Rodríguez Mondéjar
Prof. Álvaro Sánchez Miralles
UPCO ICAI Departamento de Electrónica y Automática 9
Programación en C++
Modificador inline
•
•
•
•
Permite sustituir la llamada a
una función por el código
correspondiente en el punto
del programa donde se
realiza la llamada.
Esto se realiza en tiempo de
compilación.
El resultado son programas
más eficientes, pero a la vez
programas más largos.
No siempre el compilador
sustituye la llamada a la
función por el código
correspondiente:
inline void swap(int &i, int &j)
{
int t;
t=i;
i=j;
j=t;
}
main() {
int i1,i2;
i1=1;
i2=2;
swap(i1,i2);
printf("%d %d",i1,i2);
}
21
– Caso que internamente la
función tenga una sentencia de
bucle (for, while, ...).
Prof. José A. Rodríguez Mondéjar
Prof. Álvaro Sánchez Miralles
UPCO ICAI Departamento de Electrónica y Automática 10
Descargar