Está en la página 1de 15

FdI

UCM
Contenido

Introducción al lenguaje C++ ... 5


La base de C++: el lenguaje C ... 5
Forma general de un módulo de programa ... 6
Las bibliotecas de funciones ... 7
Bibliotecas de funciones y espacios de nombres ... 9
FACULTAD DE INFORMÁTICA Un ejemplo de programa ... 10
El lenguaje C++: Datos, operadores y expresiones ... 13
Tipos de datos ... 13

El lenguaje C++ Modificadores de tipos ... 14


Nombres de identificadores ... 14
Una introducción para programadores Declaración de variables ... 15
Variables locales ... 16
Parámetros ... 16
TEMA El modificador de acceso const ... 17
Los especificadores de clase de almacenamiento ... 17

Programación orientada a objetos — Unidad 0

Autor: Luis Hernández Yáñez Programación orientada a objetos Unidad 0 - 1

FdI FdI
UCM
Contenido UCM
Contenido

El lenguaje C++: Datos, operadores y expresiones (continuación) El lenguaje C++: Control de la ejecución ... 32
extern ... 18 Bifurcación: la instrucción if ... 32
Instrucciones de asignación ... 19 Selección múltiple: la instrucción switch ... 37
Constantes literales ... 19 El bucle for ... 39
Conversión automática de tipos ... 20 El bucle while ... 40
Operadores aritméticos ... 21 El bucle do..while ... 41
Operadores relacionales y lógicos ... 22 La instrucción break ... 42
Expresiones ... 23 La instrucción continue ... 42
Moldes ... 23 El lenguaje C++: Estructuras ... 43
Inicialización de variables ... 24 Declaración de variables de un tipo de estructura ... 44
Inicialización dinámica ... 24 Referencia a los elementos de una estructura ... 44
Espaciado y paréntesis ... 25 El lenguaje C++: Enumeraciones ... 45
Abreviaturas de C ... 25 La instrucción typedef ... 47
Entrada/salida por consola ... 26
El lenguaje C++: Un ejemplo de programa ... 27

Programación orientada a objetos Unidad 0 - 2 Programación orientada a objetos Unidad 0 - 3


FdI FdI
UCM
Contenido UCM
Introducción al lenguaje C++

El lenguaje C++: Funciones ... 48 La base de C++: el lenguaje C


Forma general de una función ... 48
Prototipo de una función ... 48
• Lenguaje estructurado, pero no estrictamente estructurado en bloques
La instrucción return ... 50
(no se pueden definir funciones dentro de funciones).
Vuelta de una función ... 50 • Compartimentalización de código (funciones) y datos (variables locales).
Valores devueltos por las funciones ... 50 • Incluye las construcciones típicas de los lenguajes estructurados
Lo que devuelve main() ... 50 (distintos tipos de condicionales y bucles).
Invocación de una función ... 51
La declaración (cabecera) de la función ... 52 • Componente estructural básico: la función.
Parámetros por valor ... 53 • Otra forma de estructuración: el bloque de código.
Parámetros por referencia ... 54 if (x < 10) {
Recursión ... 55 cout << "muy pequeño, pruebe de nuevo";
Sobrecarga de funciones ... 56 reini_contador(-1);
Argumentos implícitos (por defecto) ... 57 }
Sobrecarga de operadores ... 58 Un bloque de código
El lenguaje C++: El preprocesador ... 59 • Se distingue entre mayúsculas y minúsculas. (delimitado por llaves)
• Palabras clave: en minúsculas.

Programación orientada a objetos Unidad 0 - 4 Programación orientada a objetos Unidad 0 - 5

FdI FdI
UCM
Introducción al lenguaje C++ UCM
Introducción al lenguaje C++

Forma general de un módulo de programa Las bibliotecas de funciones


ƒ Los compiladores de C/C++ proporcionan bibliotecas de funciones.
declaraciones globales
ƒ Cada biblioteca de funciones tiene asociada un archivo de definición
función2( )
que se denomina archivo de cabecera (o simplemente cabecera).
función main( ) {
{ secuencia de declaraciones ƒ Los archivos de cabecera en C tienen la extensión .h y contienen
secuencia de declaraciones e instrucciones las declaraciones de los elementos de programa (datos y funciones)
e instrucciones } que la biblioteca exporta (pone a disposición).
} ...
ƒ Para utilizar algo de una biblioteca en un módulo de programa
Funciones hay que colocar al principio una directiva de preprocesamiento
función1( ) funciónN( ) #include seguida del nombre del correspondiente archivo de
{ {
cabecera entre comillas dobles o ángulos:
secuencia de declaraciones secuencia de declaraciones
e instrucciones e instrucciones #include <cabecera>
} }
Programación modular (compilación separada de módulos)

Programación orientada a objetos Unidad 0 - 6 Programación orientada a objetos Unidad 0 - 7


FdI FdI
UCM
Introducción al lenguaje C++ UCM
Introducción al lenguaje C++

Las bibliotecas de funciones Bibliotecas de funciones y espacios de nombres


ƒ Por ejemplo, para mostrar datos en la pantalla podemos usar ƒ Las bibliotecas más modernas de C++ tienen archivos de cabecera
el operador << con el elemento cout, que representa la salida que no llevan la extensión .h; por ejemplo, la biblioteca iostream
estándar (la pantalla normalmente): se rescribió para mejorarla y para distinguirla de la antigua su archivo
cout << dato; de cabecera no lleva la extensión .h:
#include <iostream>
ƒ Pero para poder usar cout y su operador << (que, por cierto, se
denomina insertor) debemos incluir la biblioteca donde están ƒ En las bibliotecas modernas pueden estar definidos espacios de
definidos; se trata de la biblioteca cuyas declaraciones se encuentran nombres, que son algo así como secciones con nombre dentro
en el archivo de cabecera iostream.h: de las que se incluyen las declaraciones; los espacios de nombres
permiten usar varias veces un mismo identificador, cada una en un
#include <iostream.h> espacio de nombres distinto; se hace necesario en esos casos indicar
ƒ Una vez que se incluye el archivo de cabecera se conocen las el espacio de nombres que se usa:
declaraciones de la biblioteca y, por tanto, se puede usar lo que está #include <iostream>
definido en ella. using namespace std;
ƒ std es el espacio de nombres estándar.

Programación orientada a objetos Unidad 0 - 8 Programación orientada a objetos Unidad 0 - 9

FdI FdI
UCM
Introducción al lenguaje C++ UCM
Introducción al lenguaje C++

Un ejemplo de programa Un ejemplo de programa Cabecera de la función:


Biblioteca de E/S por consola
Este programa usa la definición tipo de dato que devuelve
Directiva de preprocesamiento nombre
de cout como salida estándar y
lista de parámetros entre paréntesis
el operador << que se le aplica #include <iostream>
#include <iostream> using namespace std; Función
La biblioteca puede tener definido
using namespace std; espacios de nombres. Cabecera de la función
Si no se "usa" (using namespace) un
espacio de nombres (std en este caso),
int main()
Cuerpo de la función:
int main() los elementos importados deben ser { un bloque { ... }
cualificados (std::cout, por ejemplo)
{ cout << "Me gusta programar en C++\n";
cout << "Me gusta programar en C++\n"; return 0;
return 0; }
} La ejecución siempre comienza
con la función main()
Las palabras reservadas las mostraremos en azul para resaltarlas

Programación orientada a objetos Unidad 0 - 10 Programación orientada a objetos Unidad 0 - 11


FdI FdI
UCM
Introducción al lenguaje C++ UCM
El lenguaje C++: Datos, operadores y expresiones

Un ejemplo de programa El punto y coma (;) es un Tipos de datos


terminador de instrucciones „ char
(declaraciones o ejecutables) caracteres y cualquier cantidad de 8 bits.
#include <iostream>
cout: flujo de salida estándar „ int
using namespace std;
(normalmente la pantalla) cantidades enteras (entre −32768 y 32767).
„ float
<<: operador de inserción
números reales (entre 1.18E−38 y 3.4E+38, y sus negativos).
int main() (insertor) para flujos de salida
{ Envía al flujo el operando derecho „ double
números reales más grandes
cout << "Me gusta programar en C++\n"; (entre 2.23E−308 y 1.79E+308, y sus negativos).
return 0; „ bool
} Constante de cadena Secuencias de escape valores lógicos (true / false).
de caracteres: "..." (constantes de carácter „ void
de barra invertida)
nada (indica, por ejemplo, que una función no devuelve valor).
Devuelve el valor-resultado

Programación orientada a objetos >>> Prog0001 Unidad 0 - 12 Programación orientada a objetos Unidad 0 - 13

FdI FdI
UCM
El lenguaje C++: Datos, operadores y expresiones UCM
El lenguaje C++: Datos, operadores y expresiones

Modificadores de tipos (un)signed short/long Declaración de variables


Se altera el significado de un tipo base [modificadores] tipo lista_de_variables;
unsigned short int: 0 a 255 modificador int lista_de_variables:
se abrevia a uno o más identificadores separados por comas.
unsigned int: 0 a 65535 modificador
int i, j, l;
long int: –2147483648 a 2147483647 (long int
short int si; El punto y coma es un
como long) terminador de instrucciones
unsigned long int: 0 a 4294967295 unsigned int ui;
long double: 3.37E-4932 a 1.18E+4932, y sus negativos double balance, beneficio, perdida;
„ Variables locales:
Nombres de identificadores
Declaradas dentro de las funciones o de los bloques.
„ Longitud: entre uno y 32 caracteres. „ Parámetros:
„ Primer carácter: una letra o un subrayado Definidos en la lista de parámetros formales de las funciones.
„ Resto de caracteres: letras, números o subrayados „ Variables globales:
C++ distingue entre minúsculas y mayúsculas Declaradas fuera de todas las funciones.

Programación orientada a objetos Unidad 0 - 14 Programación orientada a objetos Unidad 0 - 15


FdI FdI
UCM
El lenguaje C++: Datos, operadores y expresiones UCM
El lenguaje C++: Datos, operadores y expresiones

Variables locales El modificador de acceso const


Reglas de ámbito: como en Pascal
void f()
Permite definir constantes. Inicialización de la constante
{
int t;
... const int cuenta = 100;
if(t == 1) {
char s[80]; // esta existe sólo en este bloque
... Los especificadores de clase de almacenamiento
} [especificador] [modificadores] tipo variables;
/* aquí no se conoce a s */
} Comentarios auto static register extern
De múltiples líneas: „ auto (por defecto)
Parámetros /* ... */ Se asigna memoria durante toda la ejecución.
int calcula(int i, float f) De una sola línea: „ static
{ Se mantiene su memoria entre distintas llamadas a la función.
... // ...
„ register
} (hasta el final de la línea) Se intenta alojarla en un registro de la UCP.

Programación orientada a objetos Unidad 0 - 16 Programación orientada a objetos Unidad 0 - 17

FdI FdI
UCM
El lenguaje C++: Datos, operadores y expresiones UCM
El lenguaje C++: Datos, operadores y expresiones

extern Instrucciones de asignación


Indica que las variables ya se han declarado en otro módulo. variable = expresión;
Archivo 1 Archivo 2 Conversión automática de tipos.
int x, y; extern int x, y;
char c; extern char c; Constantes literales Constantes de barra
invertida
Tipo de dato Ejemplos
int main() void func22() Para representar
char 'a' '9' '\n' caracteres especiales:
{ {
.. . x = y / 10;
int 1 123 21000 –234
\n salto de línea
} } long int 35000 –34
\t tabulación
unsigned int 10000 987 40000
...
void func1() void func23() float 123.23 4.34e–3
{ { double 12312333 –0.9876324
x = 123; y = 10; bool true false
} }
Además, constantes de cadena: "Esto es una prueba"

Programación orientada a objetos Unidad 0 - 18 Programación orientada a objetos Unidad 0 - 19


FdI FdI
UCM
El lenguaje C++: Datos, operadores y expresiones UCM
El lenguaje C++: Datos, operadores y expresiones

Conversión automática de tipos Operadores aritméticos


Promoción de tipo: + – * / % (módulo)
cuando los dos operandos son de tipos distintos, Operadores de incremento (++) y de decremento (––).
el del tipo menor se promociona al tipo mayor.
Si precede al operando, se aplica la operación antes
Tipos de mayor a menor: de acceder al operando en la expresión:
long double
x = 10;
double
y = ++x; // y vale 11
float
long int
Si sigue al operando, se aplica la operación después
de que se acceda al operando en la expresión:
int
x = 10;
short int
y = x++; // y vale 10
char

Programación orientada a objetos Unidad 0 - 20 Programación orientada a objetos Unidad 0 - 21

FdI FdI
UCM
El lenguaje C++: Datos, operadores y expresiones UCM
El lenguaje C++: Datos, operadores y expresiones

Operadores relacionales y lógicos Expresiones


En C++, Cierto es cualquier valor distinto de 0. Falso es 0. Los operadores, las constantes y las variables son lo que constituyen
Operadores relacionales: las expresiones.
Una expresión es cualquier combinación válida de esos elementos
Operador Acción
> Mayor
(como en otros lenguajes).
>= Mayor o igual Moldes (casts)
< Menor
Fuerzan a que una expresión sea de un tipo determinado.
<= Menor o igual
== Igual (tipo) expresión
!= No igual (float) x/2 asegura que el resultado es float
Operadores lógicos:
Operador Acción Hay otras formas de moldes que se verán en su momento.
&& Y
|| O
! NO

Programación orientada a objetos Unidad 0 - 22 Programación orientada a objetos Unidad 0 - 23


FdI FdI
UCM
El lenguaje C++: Datos, operadores y expresiones UCM
El lenguaje C++: Datos, operadores y expresiones

Inicialización de variables Espaciado y paréntesis


En C++ NO se inicializan por defecto las variables. Para mayor legibilidad, se pueden añadir tabulaciones y espacios
En las declaraciones de variables se puede colocar detrás del nombre a discreción.
un signo igual seguido de un valor (el valor inicial). El uso de paréntesis redundantes o adicionales no produce errores
int i = 10, j = -1; ni disminuye la velocidad de ejecución de una expresión.

Inicialización dinámica Abreviaturas de C PRECEDENCIA DE


LOS OPERADORES
En C++, las variables locales y las variables globales Simplificación de la escritura
Mayor Moldes
pueden inicializarse durante la ejecución: de ciertos tipos de asignaciones: ++ –– (prefijos)
Expresiones x = x + 10; equivale a x += 10; !
... (incluyendo llamadas * / %
La forma general en C
int n = atoi(gets(cad)); a funciones) + –
long int pos = ftell(fp); de la abreviatura de < <= > >=
double d = 1.02 * cont / deltax; variable = variable operador expresión; == !=
&&
es variable operador= expresión; ||
Menor = += –= ...

Programación orientada a objetos Unidad 0 - 24 Programación orientada a objetos Unidad 0 - 25

FdI FdI
UCM
El lenguaje C++: Entrada/salida por consola UCM
El lenguaje C++: Un ejemplo de programa

Archivo de cabecera: iostream (con espacio de nombres std) Programa que pida la base y la altura de un triángulo,
calcule su área y muestre los datos y el resultado.
Salida por pantalla:
<<
cout << dato
Operador de inserción #include <iostream>
cout << "Hola\n"; (insertor) using namespace std;
Se pueden concatenar operadores << int main()
{
int i;
cout << endl provoca un salto de línea
...
cout << "Hola\n" << i;
Entrada por teclado:
cin >> variable >>
Operador de extracción
int i;
(extractor)
...
return 0;
cin >> i; }

Programación orientada a objetos Unidad 0 - 26 Programación orientada a objetos Unidad 0 - 27


FdI FdI
UCM
El lenguaje C++: Un ejemplo de programa UCM
El lenguaje C++: Un ejemplo de programa

Programa que pida la base y la altura de un triángulo, Programa que pida la base y la altura de un triángulo,
calcule su área y muestre los datos y el resultado. calcule su área y muestre los datos y el resultado.

#include <iostream> #include <iostream>


using namespace std; using namespace std;
int main() int main()
{ {
float base, altura, area; Los datos float base, altura, area;
cout << "Introduce la base: ";
cin >> base; Entrada de
cout << "Introduce la altura: "; datos
cin >> altura;

return 0; return 0;
} }

Programación orientada a objetos Unidad 0 - 28 Programación orientada a objetos Unidad 0 - 29

FdI FdI
UCM
El lenguaje C++: Un ejemplo de programa UCM
El lenguaje C++: Un ejemplo de programa

Programa que pida la base y la altura de un triángulo, Programa que pida la base y la altura de un triángulo,
calcule su área y muestre los datos y el resultado. calcule su área y muestre los datos y el resultado.

#include <iostream> #include <iostream>


using namespace std; using namespace std;
int main() int main()
{ {
float base, altura, area; float base, altura, area; Salida de
cout << "Introduce la base: "; cout << "Introduce la base: "; datos
cin >> base; cin >> base;
cout << "Introduce la altura: "; cout << "Introduce la altura: ";
cin >> altura; cin >> altura;
area = base * altura / 2; Cálculos area = base * altura / 2;
cout << "El área de un triángulo de base " << base
<< " y altura " << altura << " es " << area;
return 0; return 0;
} }

Programación orientada a objetos Unidad 0 - 30 Programación orientada a objetos >>> Prog0002 Unidad 0 - 31
FdI FdI
UCM
El lenguaje C++: Control de la ejecución UCM
El lenguaje C++: Control de la ejecución

Bifurcación: la instrucción if Programa que pida tres números y los muestre de mayor a menor.
if (expresión) instrucción; if (expresión) { #include <iostream>

else instrucción; secuencia de instrucciones using namespace std;


int main()
} {
float r1, r2, r3, tmp;
float r1, r2, r3, tmp;
La cláusula else else { cout << "Introduce el primer número: ";

puede no existir secuencia de instrucciones cin >> r1;


cout << "Introduce el segundo número: ";
} cin >> r2;
cout << "Introduce el tercer número: ";
int main() Cierto: distinto de cero Falso: cero
cin >> r3;
if(r1 < r2) {
{ tmp = r1;
r1 = r2;
int magico = 123; /* número mágico */ r2 = tmp;

int intento; }
if(r1 < r3) {
cout << "Adivina el número mágico: "; tmp = r1;
r1 = r3;
cin >> intento; r3 = tmp;
if(intento == magico) }

Diferencia con Pascal:


if(r2 < r3) {
cout << "** Correcto **"; tmp = r2;

else cout << ".. Incorrecto .."; ; antes del else r2 = r3;
r3 = tmp;
return 0; }
cout << r1 << " " << r2 << " " << r3 << endl;
} return 0;
}

Programación orientada a objetos Unidad 0 - 32 Programación orientada a objetos Unidad 0 - 33

FdI FdI
UCM
El lenguaje C++: Control de la ejecución UCM
El lenguaje C++: Control de la ejecución

Programa que pida tres números y los muestre de mayor a menor. Programa que pida tres números y los muestre de mayor a menor.
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int main() int main() if(r1 < r2) {
{ {
float r1, r2, r3, tmp; float r1, r2, r3, tmp; tmp = r1;
cout << "Introduce el primer número: "; cout << "Introduce el primer número: ";
cin >> r1; cin >> r1;
r1 = r2;
cout << "Introduce el segundo número: ";
cin >> r2;
cout << "Introduce el segundo número: ";
cin >> r2;
r2 = tmp;
cout << "Introduce el tercer número: "; cout << "Introduce el tercer número: "; }
cin >> r3; cin >> r3;
if(r1 < r2) { if(r1 < r2) { if(r1 < r3) {
tmp = r1;
r1 = r2;
cout << "Introduce el primer número: "; tmp = r1;
r1 = r2;
tmp = r1;
r2 = tmp;
cin >> r1; r2 = tmp; r1 = r3;
} }
if(r1 < r3) { if(r1 < r3) { r3 = tmp;
tmp = r1; cout << "Introduce el segundo número: "; tmp = r1;
r1 = r3; r1 = r3;
}
r3 = tmp; cin >> r2; r3 = tmp; if(r2 < r3) {
} }
if(r2 < r3) { cout << "Introduce el tercer número: "; if(r2 < r3) { tmp = r2;
tmp = r2; tmp = r2;
r2 = r3; cin >> r3; r2 = r3; r2 = r3;
r3 = tmp; r3 = tmp;
} }
r3 = tmp;
cout << r1 << " " << r2 << " " << r3 << endl; cout << r1 << " " << r2 << " " << r3 << endl; }
return 0; return 0;
} }

Programación orientada a objetos Unidad 0 - 34 Programación orientada a objetos Unidad 0 - 35


FdI FdI
UCM
El lenguaje C++: Control de la ejecución UCM
El lenguaje C++: Control de la ejecución

Programa que pida tres números y los muestre de mayor a menor. Selección múltiple: la instrucción switch Similar al case de Pascal
#include <iostream>
using namespace std;
int main() switch (variable) {
{
float r1, r2, r3, tmp;
cout << "Introduce el primer número: ";
case constante1:
secuencia de instrucciones
cin >> r1;
cout << "Introduce el segundo número: ";
cin >> r2;
break;
La instrucción break termina la
cout << "Introduce el tercer número: ";
cin >> r3;
if(r1 < r2) {
tmp = r1;
case constante2: ejecución del switch.
secuencia de instrucciones
r1 = r2;

}
r2 = tmp;
Si un caso no termina con break,
if(r1 < r3) { cout << r1 << " " << r2 << " " << r3 << endl; break; cuando le toque ejecutarse, su
ejecución proseguirá con la
tmp = r1;
r1 = r3;
. . .
secuencia de instrucciones del
r3 = tmp;
}
if(r2 < r3) { default: siguiente caso (si existe).
tmp = r2;
r2 = r3; secuencia de instrucciones
r3 = tmp;
}
cout << r1 << " " << r2 << " " << r3 << endl;
}
return 0;
}

Programación orientada a objetos >>> Prog0003 Unidad 0 - 36 Programación orientada a objetos Unidad 0 - 37

FdI FdI
UCM
El lenguaje C++: Control de la ejecución UCM
El lenguaje C++: Control de la ejecución

Ejemplo de switch El bucle for


char menu() for(inicialización; condición; incremento) instrucción;
{
char c; La inicialización normalmente es una instrucción de asignación
cout << "1 - Comprobar ortografía\n";
cout << "2 - Corregir errores\n";
que se utiliza para inicializar la variable de control del bucle.
cout << "Introduce tu opción: "; La condición es una expresión relacional que determina
cin >> c;
switch(c) {
cuándo finaliza el bucle.
case '1': El incremento define cómo cambia la variable de control
comprobar(); // llamada a otra función cada vez que se repite el bucle.
break;
Declaración de la variable
case '2':
corregir(); // llamada a otra función int main()
break; de control directamente
{
default: dentro del for
for(int x = 1; x <= 100; x++)
cout << "Opción no válida";
c = '0'; cout << x;
} return 0;
return c; Aunque la forma de las secciones puede ser
}
} bastante complicada, usaremos esta forma sencilla

Programación orientada a objetos Unidad 0 - 38 Programación orientada a objetos Unidad 0 - 39


FdI FdI
UCM
El lenguaje C++: Control de la ejecución UCM
El lenguaje C++: Control de la ejecución

El bucle while Similar al while...do de Pascal El bucle do...while Similar al repeat...until de Pascal
pero con el sentido contrario

while(condición) instrucción;
do {
void esperar_caracter() secuencia de instrucciones
{ } while(condición);
char c;
c = '\0'; // inicializa c al carácter nulo
while(c != 'A')
cin >> c; do {
}
cin >> num;
} while(num > 100);

Programación orientada a objetos Unidad 0 - 40 Programación orientada a objetos Unidad 0 - 41

FdI FdI
UCM
El lenguaje C++: Control de la ejecución UCM
El lenguaje C++: Estructuras

La instrucción break Estructuras Similares a los registros (record) de Pascal


Además de terminar los case de una instrucción switch, struct etiqueta { // etiqueta es el nombre de tipo
sirve para forzar la terminación inmediata de un bucle tipo nombre-de-campo;
Se puede omitir la etiqueta o la lista
for(t = 0; t < 100; t++) { tipo nombre-de-campo; de variables, pero no ambas cosas
cout << t;
... (no tendría sentido)
if(t == 10) break; // salir del for
} lista-de-variables;
}
struct pieza { pieza: nombre del tipo de estructura
La instrucción continue Fuerza una nueva iteración en un bucle int numeroModelo;
int numeroPieza; Elementos o campos de la estructura
do {
float coste;
cin >> x;
} pieza1, pieza2; variables de este tipo de estructura
if(x < 0) continue; // ignorar lo que sigue y volver
cout << x; // a comprobar la condición struct pieza { struct { // sin etiqueta
} while(x != 100); ... ...
}; // sin variables } info_pieza;

Programación orientada a objetos Unidad 0 - 42 Programación orientada a objetos Unidad 0 - 43


FdI FdI
UCM
El lenguaje C++: Estructuras UCM
El lenguaje C++: Enumeraciones

Declaración de variables de un tipo de estructura Enumeraciones


struct tipo variable; enum etiqueta {lista_de_símbolos} lista_de_variables;
// etiqueta es el nombre del tipo de enumeración
struct pieza info_pieza;
En este tipo de declaraciones se puede omitir struct: enum moneda { centimo, dos_centimos, cinco_centimos,
pieza info_pieza; diez_centimos, veinte_centimos,
medio_euro, euro};
enum moneda dinero;
Referencia a los elementos de una estructura ...
dinero = diez_centimos;
Se utiliza el operador punto (•) if(dinero == medio_euro)
variable-de-estructura.nombre-de-campo cout << "es la mitad de un euro\n";

info_pieza.coste Se pueden usar las enumeraciones para definir constantes,


asignando valores a los símbolos de la enumeración:
enum { MAX = 100 };

Programación orientada a objetos Unidad 0 - 44 Programación orientada a objetos Unidad 0 - 45

FdI FdI
El lenguaje C++: Enumeraciones El lenguaje C++: typedef
UCM UCM

Los símbolos internamente son valores enteros. La instrucción typedef


Si se quieren mostrar las cadenas que significan los símbolos typedef tipo nombre;
se ha de utilizar un switch:
switch(dinero) { Simplemente define un nuevo nombre para un tipo.
case centimo: cout << "céntimo"; break;
typedef float balance;
case dos_centimos: cout << "dos céntimos";
break; balance negativo;
case cinco_centimos: cout << "cinco céntimos";
break;
case diez_centimos: cout << "diez céntimos";
break;
case veinte_centimos: cout << "veinte céntimos";
break;
case medio_euro: cout << "medio euro"; break;
case euro: cout << "euro";
}

Programación orientada a objetos Unidad 0 - 46 Programación orientada a objetos Unidad 0 - 47


FdI FdI
UCM
El lenguaje C++: Funciones UCM
El lenguaje C++: Funciones

Forma general de una función #include <iostream>


tipo nombre (lista de parámetros) using namespace std;
{ int potencia(int x); Prototipo
cuerpo de la función No se pueden anidar funciones
} (declarar una función dentro de otra) int main()
Prototipo de una función {
A excepción de main(), en el módulo de programa debe aparecer el ...
prototipo de cada función antes de que se utilice por primera vez esa }
función (a menudo al principio del módulo):
tipo nombre (lista de parámetros); int potencia(int x)
El prototipo de una función informa de la existencia de la función { Implementación
(implementada más adelante), el tipo de dato que devuelve y ... de la función
los parámetros que tiene definidos. }

Programación orientada a objetos Unidad 0 - 48 Programación orientada a objetos Unidad 0 - 49

FdI FdI
UCM
El lenguaje C++: Funciones UCM
El lenguaje C++: Funciones

La instrucción return Invocación de una función


„ Fuerza la salida inmediata de la función. Nombre de la función seguido de los argumentos entre paréntesis.
„ Sirve también para devolver un valor (el resultado). Tantos argumentos como parámetros, correspondiéndose según el
orden de declaración y con concordancia de tipo.
Vuelta de una función
potencia(k)
„ Tras ejecutar la última instrucción (funciones tipo void).

„ Al ejecutar una instrucción return. ¿Dónde puede colocarse la llamada a una función?
Puede haber más de una instrucción return. Funciones void: void espacios();
No pueden usarse en expresiones. ...
Valores devueltos por las funciones espacios();
Todas las funciones, excepto las de tipo void, devuelven un valor Funciones que no son de tipo void:
(por medio de un return). pueden usarse en expresiones o no. i = j + potencia(k);
Si no se usan en expresiones,
Lo que devuelve main() Al sistema operativo el valor se pierde. potencia(k);
Código de terminación del programa (un entero).
Como si fuera un procedimiento de Pascal

Programación orientada a objetos Unidad 0 - 50 Programación orientada a objetos Unidad 0 - 51


FdI FdI
UCM
El lenguaje C++: Funciones UCM
El lenguaje C++: Funciones

La declaración (cabecera) de la función Parámetros por valor


Tipo de dato que devuelve: El mecanismo normal de paso de argumentos a funciones.
cualquier tipo estándar o previamente declarado.
int cuad(int);
Lista de parámetros formales: ...
declaraciones de los parámetros separadas por comas. int cuad(int x)
Cada declaración de parámetro: {
tipo nombre ...
donde tipo puede incluir modificadores y especificador.
El argumento puede ser cualquier expresión:
En el prototipo se pueden (se suelen) omitir los nombres de
los parámetros: ...
float potencia(float, int); // prototipo k = cuad(13);
k = cuad(i);
k = cuad(21 * i + j);
float potencia(float x, int i) Si no hay parámetros,
{ ... se pone void o nada

Programación orientada a objetos Unidad 0 - 52 Programación orientada a objetos Unidad 0 - 53

FdI FdI
UCM
El lenguaje C++: Funciones UCM
El lenguaje C++: Funciones

Parámetros por referencia Recursión (o recursividad)


Se coloca & detrás del tipo en la declaración del parámetro: int fact(int n)
{
void inter(int&, int&);
...
int resp;
void inter(int& x, int& y) if(n == 1) return(1);
{
resp = fact(n - 1) * n;
int tmp; El equivalente a poner var en la
tmp = x; declaración de un parámetro en Pascal return(resp);
x = y;
y = tmp;
}
}

El argumento debe ser una variable ¡No se utiliza el nombre de la función para devolver valores!
inter(a, b);

Programación orientada a objetos Unidad 0 - 54 Programación orientada a objetos Unidad 0 - 55


FdI FdI
UCM
El lenguaje C++: Funciones UCM
El lenguaje C++: Funciones

Sobrecarga de funciones Argumentos implícitos (por defecto)


Funciones con el mismo nombre pero con diferente definición void f(int i = 1) Si se ponen en el prototipo, no se vuelven
de parámetros. { ... }
a poner en la implementación de la función
El compilador sabe cuál utilizar por los argumentos que se usan
en la llamada. Ahora, f() puede llamarse de una de dos formas:
f(10); // pasa un valor explícito
int cuadrado(int i); Diferente número de
double cuadrado(double d); parámetros o parámetros f(); // la función usa el valor implícito
long int cuadrado(long int l); de distintos tipos
int main() Todos los parámetros que se declaren con argumentos implícitos
{ deben encontrarse al final de la lista de parámetros:
cout << cuadrado(10) << "\n"; void f(int i, int j=2, int k=3); // CORRECTO
cout << cuadrado(11.0) << "\n";
cout << cuadrado(9L) << "\n"; void f(int i=1, int j, int k=3); // INCORRECTO
return 0;
Una vez asignado un valor implícito,
} ...
Para indicar que se trata de un long int y no un int debe haber también para los parámetros que siguen

Programación orientada a objetos Unidad 0 - 56 Programación orientada a objetos Unidad 0 - 57

FdI FdI
UCM
El lenguaje C++: Funciones UCM
El lenguaje C++: El preprocesador

Sobrecarga de operadores ¿ Por qué no poder escribir Directivas de preprocesamiento


Matriz1 + Matriz2
Instrucciones dirigidas al compilador en el código fuente
en lugar de
tipo operatorsímbolo (operandos) de un programa en C++.
suma(Matriz1,Matriz2) ?
Todas las directivas empiezan con el símbolo #.
struct punto {
int x, y; Parámetros #define
};
#define nombre cadena

Antes de compilar, cada ocurrencia


punto operator+(punto p1, punto p2) #define CIERTO 1
{ #define FALSO 0 del nombre se sustituye por la cadena
punto tmp;
#include
tmp.x = p1.x + p2.x; Inclusión de archivos fuente.
tmp.y = p1.y + p2.y; struct punto p1, p2, p3;
... #include "iostream.h"
p3 = p1 + p2; #include <iostream.h> El compilador localiza los archivos de forma
diferente si se usan "" o <> (consultar)
return tmp;
}

Programación orientada a objetos Unidad 0 - 58 Programación orientada a objetos Unidad 0 - 59

También podría gustarte