Está en la página 1de 21

Ir al Men

C OMPILADORES
Ests aqu: Inicio > Proyecto > Lenguaje

I NTRODUCCIN A C++ PARA EL P ROYECTO DE "C OMPILADORES "


Curso 2010/2011

C ONTENIDO :
Generalidades Estructura de un Programa Comentarios Constantes Operadores Identificadores Declaraciones Instrucciones de entrada/salida Tipos de Datos Sentencias Funciones Clases Ms informacin sobre el lenguaje

G ENERALIDADES

C++ es el lenguaje de programacin multiobjetivo ideado en 1984 por Bjarne Stroustrup a partir del lenguaje C. C++ es un lenguaje en el que se diferencian las minsculas y las maysculas (case sensitive). Tambin es un lenguaje de formato libre, es decir, que se admiten espacios, tabuladores, saltos de lnea y comentarios en cualquier parte del cdigo. Las palabras clave del lenguaje son reservadas, aunque cada grupo de alumnos slo ha de tener en cuenta las palabras asignadas al grupo. C++ es un lenguaje con estructura de bloques, que se definen mediante la utilizacin de las llaves { }. Los nombres declarados dentro de un bloque son locales a dicho bloque. Los bloques vienen definidos por las funciones, clases y mtodos. Los nombres declarados fuera de cualquier funcin, mtodo o clase son globales y pueden ser utilizados desde cualquier mtodo o funcin que est definida con posterioridad. No se permite la definicin de funciones o mtodos anidados. C++ es un lenguaje con recursividad, por lo que cualquier funcin o mtodo puede ser recursivo. El paso de parmetros puede ser por valor o por referencia. No es necesario considerar para el Proyecto las directivas del preprocesador de C++. En C++ es necesario declarar previamente todo lo que se utilice. Las declaraciones y sentencias finalizan en punto y coma, a menos que la sentencia finalice con un bloque (entre llaves). Este resumen presenta las principales caractersticas de C++ que hay que implementar para el Proyecto de la asignatura deCompiladores. Solo es necesario considerar los elementos de C++ mencionados en este resumen. Entre corchetes se dan indicaciones sobre la obligatoriedad u opcionalidad de incluir en este Proyecto algunas partes del lenguaje. Con el fin de facilitar la implementacin del compilador, las caractersticas mostradas en esta pgina pueden no coincidir al 100% con el estndar del lenguaje, por lo que, en caso de duda, se deber implementar el comportamiento aqu descrito.

E STRUCTURA DE UN P ROGRAMA
Para el Proyecto de Compiladores debe considerarse que un programa en C++ tiene la siguiente estructura: una serie de clases y funciones, siendo una de ellas la funcin principal (main); fuera de las funciones y las clases, se declaran las variables globales y se definen los mtodos de las clases. Aqu se tiene un ejemplo de un fichero vlido para el Proyecto.

C OMENTARIOS
En C++ hay dos tipos de comentarios [solamente hay que implementar uno de ellos]: 1. Se utilizan los caracteres /* para abrir el comentario, y */ para cerrarlo. No se admiten comentarios anidados. Los comentarios pueden ocupar ms de una lnea y pueden ir colocados en cualquier parte del cdigo donde pueda ir un espacio:

/* Comentario con apertura y cierre */


2. Los comentarios comienzan por los caracteres // y finalizan al acabar la lnea. Este tipo de comentario slo ocupa una lnea y puede ir colocado en cualquier parte del cdigo donde pueda ir un espacio:

// Comentario de lnea

C ONSTANTES
El lenguaje dispone de varios tipos de constantes, de las cuales solamente habr que tener en cuenta las siguientes:

ENTEROS
Hay tres notaciones: decimal, octal y hexadecimal [slo es obligatorio implementar los enteros decimales]: Decimal: 159 Octal (usando como prefijo un cero): 052 Hexadecimal (usando como prefijo un cero y una equis): 0x1E4

El lenguaje impone que los nmeros enteros se representen con 2 bytes (con signo); por tanto, el mayor entero posible ser el 32767.

CADENAS DE CARACTERES
Las constantes de cadena van encerradas entre comillas dobles: "Hola, mundo". Se utiliza el carcter nulo (cuyo cdigo ASCII es 0) como carcter de fin de cadena. Puede aparecer cualquier carcter imprimible en la cadena [es obligatorio implementar las cadenas constantes]. Para representar caracteres especiales se utiliza una secuencia de escape. Una secuencia de escape se representa mediante el carcter barra inversa seguido de un determinado carcter. Algunos de estos caracteres son el salto de lnea ( \n), el

tabulador (\t), el carcter nulo (\0), las comillas dobles (\") o el carcter de barra inversa (\\) [la implementacin de estos caracteres especiales es opcional].

LGICAS
En C++ existen dos constantes lgicas: true y false [es opcional implementar las constantes true y false]. Adems, cualquier expresin que se evale como 0 se considera como falsa, y cualquier expresin que se evale con un valor distinto a 0 se considera verdadera.

O PERADORES
Este lenguaje presenta un rico conjunto de operadores con los que escribir distintas expresiones. Adems, se pueden utilizar los parntesis para agrupar subexpresiones.

OPERADORES ARITMTICOS
Son los operadores que permiten realizar la suma, resta, producto, divisin y mdulo: +, -, *, / y % [obligatorio implementar al menos uno]. Se aplican sobre datos enteros, proporcionando un resultado entero. Tambin existen los operadores ms y menos unarios: +, - [implementacin opcional].

OPERADORES DE RELACIN
Son los operadores que permiten realizar las comparaciones de igual, distinto, menor, mayor, menor o igual, mayor o igual: ==,!=, <, >, <= y >= [obligatorio implementar al menos uno de los operadores]. Se aplican sobre datos enteros y proporcionan un resultado lgico.

OPERADORES L GICOS
Representan las operaciones de conjuncin, disyuncin y negacin: &&, || y ! [obligatorio implementar al menos uno]. Se aplican sobre datos lgicos y devuelven un resultado lgico.

AUTO- INCREMENTOS Y AUTO- DECREMENTOS


C++ dispone de operadores para incrementar o decrementar el valor de una variable: ++ y -- (tanto prefijos, como sufijos) [implementacin obligatoria para algunos grupos; tendrn que implementar al menos una de las cuatro formas del operador]:

a = j++; // si j vala 5, ahora a == 5 y j == 6 a = ++j; // si j vala 5, ahora a == 6 y j == 6

OPERADOR C ONDICIONAL
El operador condicional permite obtener un determinado valor basndose en una condicin: condicin ? exp1 : exp2. Si la condicin es cierta, devuelve exp1, en caso contrario, devuelve exp2 [implementacin obligatoria para algunos grupos]:

max = (a > b) ? a : b; //Si a > b entonces max == a; en caso contrario, max == b

OPERADOR DE ASIGNACIN
C++ utiliza el operador de asignacin: = [implementacin obligatoria]:

n = m;

/* copia el valor de m en n */

OPERADOR DE ASIGNACIN CON OPERACIN


C++ permite realizar operaciones de asignacin complejas mediante los operadores: +=, -=, *=, /= y %= [implementacin obligatoria para algunos grupos]:

n += m;

/* es equivalente a n = n + m; */

OPERADOR DE ACCESO A MIEMBROS DE UNA CLASE


Mediante el operador punto se puede acceder a un miembro de una clase [implementacin obligatoria]:

cl.campo /* accede al miembro campo de la clase cl */

OPERADOR DE ACCESO A ELEMENTOS DE UN VECTOR


Para acceder a los elementos de un vector se utilizan los operadores corchete [implementacin obligatoria para los grupos que tengan vectores]:

a=v[i+1]; // accede al elemento i+1 del vector v y copia su valor en a

PRECEDENCIA DE OPERADORES
En la tabla siguiente se muestra la precedencia de los operadores con el siguiente significado: los operadores del mismo grupo tienen la misma precedencia y, conforme

se desciende por la tabla, la precedencia disminuye. En cualquier caso, el uso de parntesis permite alterar el orden de evaluacin de las expresiones [es obligatorio para todos los grupos implementar el uso de parntesis y tener en cuenta las precedencias de los operadores utilizados].
Precedencias de los Operadores

Operadores

Significado Referencia a un miembro de una clase Llamada a funcin Referencia a un elemento de un vector No, negacin lgica (NOT) Autoincremento Autodecremento Ms unario Menos unario Producto Divisin Mdulo Suma Resta Mayor Mayor o igual Menor Menor o igual Igual Distinto Y lgico O lgico Operador Condicional Asignacin Asignacin con operacin

Asociatividad Izquierda a derecha

. () [] ! ++ -+ * / % + > >= < <= == != && || ? : = op=

Derecha a izquierda

Izquierda a derecha

Izquierda a derecha

Izquierda a derecha

Izquierda a derecha Izquierda a derecha Izquierda a derecha Derecha a izquierda Derecha a izquierda

I DENTIFICADORES
Los nombres de identificadores estn formados por cualquier cantidad de letras, dgitos o subrayados, siendo el primero siempre una letra o un subrayado. Ejemplos: a, a3, A3, _a3, a_3, a3_, Sueldo_De_Trabajador... Como ya se ha dicho, el lenguaje es dependiente de minsculas o maysculas, por lo que los nombres a3 y A3 hacen referencia a distintos identificadores.

D ECLARACIONES
El lenguaje C++ exige declaracin previa de todos los identificadores que se utilicen. Para realizar una declaracin de una variable, se coloca el tipo seguido del nombre de la variable, finalizando en punto y coma. Se puede poner una lista de variables separadas por comas [esta declaracin mltiple es opcional para la implementacin]:

Tipo var1; Tipo var1, var2, var3; // se declaran las tres variables del mismo tipo
En una declaracin se puede inicializar la variable mediante el signo igual [opcional para la implementacin]:

Tipo var4 = valor;


Si una variable no se inicializa cuando se declara, tendr un valor indefinido hasta que se le asigne un determinado valor (es decir, el compilador no realiza una inicializacin por omisin). Pueden realizarse declaraciones en cualquier lugar de un bloque; en este caso, la variable ser visible desde ese punto hasta el final del bloque (son locales a dicho bloque). Tambin pueden realizarse declaraciones fuera de las clases en cualquier parte del cdigo (variables globales), siendo solo visibles desde ese punto hasta el final del fichero. La declaracin de vectores se tratar en el apartado tipos de datos. Los parmetros de una funcin o de un mtodo se consideran como variables locales declaradas.

I NSTRUCCIONES DE E NTRADA /S ALIDA


La sentencia cin >> variableEntera lee un nmero del teclado y lo almacena en la variableEntera. La sentencia cin >> variableCadena lee una cadena del teclado y la almacena en la variableCadena [solo para los grupos que tengan el tipo cadena]. La sentencia cout << expresin_entera evala la expresin, imprime el resultado por pantalla y salta de lnea.

La sentencia cout << cadena imprime la cadena por pantalla y salta de lnea. Las sentencias de salida pueden agruparse en una nica sentencia de la siguiente forma [es opcional implementar esta secuencia]. Ejemplo:

cout << "Dime tu nombre: "; // Imprime la cadena y salta de lnea cin >> nombre; // Lee una cadena (nombre est declarada como cadena) cout << "Dime tu edad: "; // Imprime la cadena y salta de lnea cin >> edad; // Lee un entero (edad est declarada como entero) cout << nombre << " tiene " << edad << " aos."; // Imprime todo y salta de lnea

T IPOS DE D ATOS
El lenguaje dispone de distintos tipos de datos, que pueden ser clasificados en Tipos Bsicos (o elementales) y Tipos Compuestos (que se forman a partir de tipos bsicos).

TIPOS BSICOS
Se deben considerar slo los siguientes tipos de datos bsicos: entero, vaco y lgico. El tipo entero se refiere a un entero que debe representarse con un tamao de 16 bits (puesto que viene impuesto por el ensamblador). Se representa mediante la palabra int El tipo

vaco, que se indica mediante la palabra void, se usa para funciones o

mtodos que no devuelvan ningn valor o que no reciban argumentos. El tipo lgico permite representar valores lgicos. Se representan mediante la palabra bool.

El lenguaje permite conversiones entre tipos, de entero a lgico y viceversa (el valor entero 0 se considera falso; cualquier otro valor entero se considera verdadero).

TIPOS C OMPUESTOS
Cada grupo tendr que implementar uno de los tipos compuestos, basndose en la opcin que le corresponda. En los ejemplos se va a hacer uso de elementos del lenguaje que se explicarn posteriormente.

Vectores
Para usar un vector es obligatorio declarar una variable de tipo vector indicando su tamao. Su declaracin es de la siguiente forma [implementacin obligatoria para algunos grupos]:

Tipo nombre_var [tamao]; // declaracin del vector


El valor tamao debe ser un valor entero constante que especifica la dimensin del vector. Los ndices del vector van desde 0hasta tamao - 1, ambos incluidos. Los elementos del vector sern enteros. Para acceder a un elemento del vector se usan los operadores corchete ( [ y ]) con el ndice en su interior. El ndice del vector puede ser cualquier expresin entera vlida:

int x[24]; // Se ha declarado el vector x de 24 elementos enteros int w[31], v[31]; // Se han declarado los vectores v y w de 31 elementos enteros v[26]= 2; // se almacena un 2 en la posicin 26 x[3]= 13; // se almacena un 13 en la posicin 3 w[1]= v[x[3] * 2]; // se almacena un 2 en la posicin 1
Con un vector se pueden realizar las siguientes operaciones: consultar y modificar sus elementos (a travs de su ndice), asignar una variable tipo vector a otra (siempre que tengan el mismo tamao) y ser argumento de una funcin o mtodo. La asignacin de vectores realiza una copia de todos los elementos de una variable vector en otra variable vector con el mismo tamao. Con respecto a las funciones y mtodos, los vectores se pueden pasar como argumentos por referencia, pasando directamente su direccin, pero no pueden devolver un vector. En la declaracin del procedimiento debe indicarse el tipo y nombre del parmetro seguido del tamao del vector entre corchetes:

void p (int x[15]) // La funcin p recibe un vector de 15 enteros { for (i = 0; i < 15; i++) cout << x[i]; } void main (void) { int v[15]; // Declara el vector v de enteros con ndices entre 0 y 14 for (i = 14; i >= 0; --i) cin >> v[14 - i]; p (v); // Se llama a la funcin, pasndole el vector como parmetro }

Cadenas

C++ permite declarar variables de tipo cadena. La sintaxis para declarar o definir una variable de tipo cadena mediante el tipo char * es [implementacin obligatoria para algunos grupos]:

char * nombre_var; /* declara una cadena */ char * nombre_var = "Hola"; // declara e inicializa la cadena con los caracteres indicados ms el nulo
Se permiten operaciones de asignacin de cadenas (asignando una variable o constante de tipo cadena a una variable de tipo cadena), envo como argumento a un mtodo o funcin por referencia, impresin de una cadena en pantalla (mediante la instruccin cout), la lectura de cadenas del teclado (mediante la instruccin cin) y el clculo de la longitud de una cadena (mediante la funcin strlen (cadena)). La asignacin de cadenas realiza una copia de todos los caracteres de una variable cadena en otra variable cadena. La funcin de longitud de una cadena cuenta el nmero de caracteres que tiene, sin contar el carcter nulo del final. Con respecto a los mtodos y funciones, las cadenas se pueden pasar como argumentos por referencia (copiando su direccin), pero no pueden devolver una cadena. En la declaracin del mtodo o funcin debe indicarse el tipo y el nombre de los parmetros:

void cadenas (char * x, char * y) { char * u, aux; cin >> u; // lee una cadena del teclado aux = u; // copia la cadena u en aux cout << aux; // imprime la cadena leda cout << strlen (x) + strlen (y); // calcula la longitud de ambas cadenas } void main (void) { char * c = "C++"; cadenas ("Hola", c); }
[Nota: Como simplificacin para su implementacin, puede asumirse un tamao fijo mximo para cada cadena.]

S ENTENCIAS

De todo el grupo de sentencias del lenguaje C++, se han seleccionado para ser implementadas en el Proyecto las que aparecen a continuacin [opcional u obligatoriamente, segn se indique en cada caso]:

SENTENCIAS DE ASIGNACIN
Existe una sentencia de asignacin en C++, mediante el operador de asignacin = [es obligatorio implementar la sentencia de asignacin]. Su sintaxis general es la siguiente:

variable= expresin;
La sentencia de asignacin copia en la variable el resultado de evaluar la expresin (la variable y la expresin deben ser del mismo tipo o de tipos compatibles):

i= 8 + 6; i= a > b;
Tambin se permite que a la izquierda de la asignacin aparezca un elemento de un vector [obligatorio para los grupos que tengan vectores] o un atributo de una clase:

v[i]= 5; c.a= 9;

SENTENCIA DE LLAMADA A UNA FUNCIN O UN MTODO


Esta sentencia permite invocar la ejecucin de una funcin o de un mtodo previamente definido [implementacin obligatoria]. La llamada a una funcin o a un mtodo se realiza mediante su nombre y los parmetros actuales (separados por comas) entre parntesis si existen, de la siguiente forma:

nombre (parmetros);
Los parmetros actuales en la llamada tienen que coincidir en nmero y tener tipos compatibles con los parmetros formales de la declaracin:

func (); /* llamada a una funcin sin argumentos */ f2 (b, i - 8); /* llamada a una funcin con dos argumentos */ obj.func (); /* llamada a un mtodo sin argumentos */ obj.f2 (b, i - 8); /* llamada a un mtodo con dos argumentos */

Anlogamente, se puede invocar una funcin o un mtodo dentro de una expresin para utilizar el valor devuelto:

b= c= // //

1 + fun1 (9); // se llama a una funcin con un argumento entero b + fun2 (b, o.fun3 () - 8); se llama a una funcin con dos argumentos siendo fun3, una llamada a un mtodo sin argumentos

SENTENCIA DE RETORNO
La sentencia de retorno permite finalizar la ejecucin de una funcin o de un mtodo [implementacin obligatoria para todos los grupos]. Si la funcin o el mtodo es de tipo void, la sentencia de retorno no lleva argumentos: return;. Si la funcin o el mtodo es de tipo entero, la sentencia de retorno deber ir acompaada de una expresin entera: returnexpresin_entera;:

return 2 * factorial (i); /* la funcin o mtodo devuelve un entero */ return; /* la funcin o mtodo es de tipo void */

SENTENCIA CONDICIONAL SIMPLE


Es una sentencia que selecciona si se ejecuta una sentencia, dependiendo del valor correspondiente de una condicin de tipo lgico [implementacin obligatoria para todos los grupos]:

if (condicin) sentencia
Si la condicin se evala como cierta (distinta de 0), se ejecuta la sentencia. Esta sentencia podr ser nicamente cualquier sentencia sencilla del lenguaje (asignaciones, llamadas a funciones o mtodos, instrucciones de entrada/salida o retorno):

if (a > b) max = a; if (f(i)) cout << "Hola";

SENTENCIA CONDICIONAL COMPUESTA


Es una sentencia que decide si se ejecuta alguno de los grupos de sentencias que contiene, dependiendo del valor correspondiente de una condicin de tipo lgico. Su sintaxis es una de las siguientes [implementacin obligatoria para los grupos que les corresponda]:

if (condicin) sentencias1 if (condicin) sentencias1 else sentencias2

Si la condicin se evala como cierta (distinta de 0), se ejecutan las sentencias1; en caso contrario, se ejecutan lassentencias2 (si el programador ha escrito la parte else). Cada uno de estos grupos de sentencias podr ser bien un bloque de varias sentencias encerradas entre llaves o bien una nica sentencia:

if (a > b) { c = a; cin >> d; } if (a > b) { cin >> c; cout << cubo(c); } else if (a > f(c)) cout << "Fin";

SENTENCIA REPETITIVA WHILE


Esta sentencia permite repetir la ejecucin de unas sentencias basndose en el resultado de una expresin lgica [implementacin obligatoria para algunos grupos]. La sintaxis es:

while (condicin) sentencias


Se evala la condicin y, si resulta ser cierta, se ejecutan las sentencias (que puede ser una nica sentencia o bien un bloque de sentencias entre llaves). Este proceso se repite mientras que la condicin sea verdadera:

while (i > 0) { cin >> i; cout << i * i; } while (a) c *= b - --a; /* mientras que a no sea 0... */

SENTENCIA REPETITIVA DO WHILE


Esta sentencia permite repetir la ejecucin de las sentencias del bucle hasta que no se cumpla una condicin [implementacin obligatoria para algunos grupos]. La sintaxis es:

do sentencias while (condicin);


En esta instruccin se puede colocar una nica sentencia o bien un bloque de sentencias entre llaves. Se ejecutan lassentencias; seguidamente se evala la condicin y, si resulta ser cierta, se ejecutan de nuevo las sentencias. Este proceso se repite hasta que la condicin sea falsa:

do { cout << "Jugamos una partidita de ajedrez? (1=s/0=no)"; cin >> seguir; } while (seguir != 1 && seguir != 0); // No se abandona el bucle hasta que se conteste con un 1 o con un 0 do c *= b - a++; while (a < b);

SENTENCIA REPETITIVA FOR


Esta sentencia permite ejecutar un bucle un nmero repetido de veces en funcin de una condicin y de la actualizacin realizada [implementacin obligatoria para algunos grupos]. La sintaxis es:

for (inicializacin; condicin; actualizacin) sentencias


El funcionamiento de este bucle es como sigue. Se ejecuta la inicializacin, se evala la condicin y, si sta es cierta, se ejecutan las sentencias (que puede ser una nica sentencia o bien un bloque de sentencias entre llaves) y despus se ejecuta la actualizacin. A continuacin se vuelve a evaluar la condicin y se sigue el proceso hasta que sea falsa. La sentencia puede ser un bloque:

for (i = 1; i < 10; i++) f *= i; for (b = 1; i < 88; i = i + 2) { cout << "b= " << b; for (e = 1; e < i; i += 1) cout << b % e; }

SENTENCIA DE SELECCIN MLTIPLE SWITCH

Esta sentencia selecciona qu sentencias se ejecutan basndose en el resultado de una expresin entera [implementacin obligatoria para algunos grupos]. La sintaxis de la sentencia de seleccin mltiple es:

switch (expresin) { case valor1: sentencias1 case valor2: sentencias2 . . . default: sentenciasn }
Su funcionamiento es como sigue: Se evala la expresin (que debe ser de tipo entero), se busca el valor en los case que coincida con el resultado (los valores tienen que ser constantes enteras) y se ejecuta su sentencia o sentencias asociadas (si hay ms de una sentencia, no hace falta encerrarlas entre llaves), seguidas de todas las sentencias que haya hasta el final delswitch (aunque estn en otros case). Si no se encuentra el valor en ningn case, se ejecutan las sentencias asociadas adefault [la implementacin del default es opcional]; si no existe default, no se ejecuta nada. No puede haber dos case con el mismo valor en una sentencia switch:

switch (dia) { case 1: cout << "lunes"; case 2: cout << "martes"; case 3: cout << "mircoles"; case 4: cout << "jueves"; case 5: cout << "viernes"; default: cout << "fiesta"; } /* si dia == 4, se imprimir: jueves viernes fiesta */

SENTENCIA BREAK
Esta sentencia aborta la ejecucin de un bucle o un switch [obligatoria slo para los grupos que tengan la sentencia switch]:

switch (dia) { case 1: cout << "lunes"; break; case 2: cout << "martes"; case 3: cout << "mircoles"; break; case 4: cout << "jueves"; break; case 5: cout << "viernes"; break; default: cout << "fiesta"; } /* si dia == 4, se imprimir: jueves */

F UNCIONES
Es necesario definir cada funcin antes de poder utilizarla. Para definir una funcin se pone el tipo, el nombre y los argumentos entre parntesis, seguido de un bloque con el cuerpo de la funcin:

tipo nombre (lista de argumentos) { sentencias }


El tipo se puede omitir en la definicin de la funcin; en el caso de que se omita, se considera que la funcin es de tipo int. Los tipos que han de implementarse como tipo de retorno sern slo int o void [opcionalmente, tambin bool]. Si la funcin es de tipo int o no se indica el tipo, quiere decir que devuelve un valor de tipo entero. Si la funcin es de tipo void, quiere decir que no devuelve ningn valor. La lista de argumentos (que puede estar vaca, indicndose con void) consta de un tipo seguido del nombre del argumento [hay que implementar el paso de parmetros de los tipos bsicos y de los tipos complejos, pero no hay que implementar los parmetros de tipo objeto de una clase]. Si hay ms de un argumento, stos se separan por comas indicando el tipo para cada uno. A continuacin se muestran algunas cabeceras de funciones:

f1 (int p) // funcin de tipo entero con un argumento entero int f2 (void) // funcin entera sin argumentos (parntesis obligatorios) void f3 (int a, int b) // funcin que no devuelve nada, con dos argumentos enteros
C++ admite recursividad. Todos los grupos han de considerarla en la implementacin. Tanto los mtodos como las funciones pueden ser recursivas, es decir, pueden llamarse a s mismas. En cuanto al paso de parmetros, se pasan por referencia si se antepone al nombre del argumento formal el smbolo &, con la excepcin de los vectores y las cadenas, que siempre se pasan por referencia sin tener que poner el smbolo &. En el resto de casos, el paso es por valor [cada grupo tendr que implementar solo uno de los dos mtodos de paso para los tipos bsicos]. Ejemplos:

f (int a, int v[]) // a es por valor, v es por referencia f (int &a, char *s) // a es por referencia, s es por referencia

Dentro de una funcin se tiene acceso a las variables que se declaren en ella (locales), a los argumentos y a las variables globales. Si en una funcin se declara una variable local o un argumento con el mismo nombre que una variable global, sta ltima no es accesible desde dicha funcin. El lenguaje C++ no permite la definicin de funciones anidadas. Esto implica que dentro de una funcin o de un mtodo no se puede definir otro. La ejecucin de un mtodo o de una funcin finalizar cuando se llegue al final de su cuerpo o cuando se ejecute una instruccin return. Ejemplos de funciones:

void Suma (int aux [50], int fin) { // se define la funcin Suma que recibe un vector y un entero for (i= 0; i < fin; i = i + 2) cout << factorial (aux [i]); } void fecha (char * nombre, int edad) { cout << nombre << " tiene " << edad << " aos."; int year; year= 2010 - edad; cout << nombre << " naci en " << year; } int factorial (int x) { // se define la funcin recursiva entera con un parmetro entero int f; if (x > 1) f= x * factorial (x - 1); else return 1; return f; } cubo (int n) { cout << "calculando el cubo de " << n; int temp; temp = n * n * n; return temp; } int edad (void) { // esta funcin no recibe ningn parmetro int ed; cout << "Edad?";

cin >> ed; return ed; }

FUNCIN PRINCIPAL
La funcin principal (la que se ejecutar al arrancar el programa) ser una funcin especial que recibe el nombre de main, sin argumentos y que tiene que ser de tipo void:

void main (void) { cuerpo_de_la_funcin_principal }

C LASES
C++ es un lenguaje orientado a objetos, por lo que cuenta con la posibilidad de definir y utilizar clases. Es necesario declarar cada clase antes de poder utilizarla. Para definir una clase se pone la palabra class, el nombre y los miembros entre llaves:

class nombre { miembros; };


Los miembros pueden ser de dos tipos: atributos y mtodos. Los atributos son variables declaradas en el seno de la clase (que pueden ser de cualquier tipo excepto otra clase) y los mtodos son funciones de la clase. El siguiente ejemplo muestra la declaracin de una clase con dos atributos y dos mtodos:

class Ejemplo { int i; // atributo i entero bool b; // atributo b lgico void imprime(int); // mtodo que recibe un entero y no devuelve nada int valor(void); // mtodo que no recibe nada y devuelve un entero };
Obsrvese que los mtodos nicamente se declaran en el cuerpo de la clase, indicando el tipo que devuelven, su nombre y el tipo de los parmetros. La definicin del mtodo deber realizarse con posterioridad (de manera similar a la explicada para las funciones y siguiendo sus caractersticas de funcionamiento), usando la siguiente

notacin (evidentemente, el tipo de retorno y los tipos de los parmetros deben coincidir con los declarados en la clase):

tipo NombreClase::NombreMtodo (parmetros) { sentencias; }


La caracterstica de la ocultacin de la informacin se encuentra implantada en C++ mediante el control de acceso a los miembros de las clases. Para controlar el acceso a los miembros, stos pueden declararse como pblicos o privados, utilizando las correspondientes palabras reservadas:

public: los miembros pblicos pueden ser utilizados por todos los usuarios de
la clase.

private: los miembros privados slo pueden ser utilizados por los propios
mtodos de la clase.

Si no se indica un control de acceso, se supone que los miembros son privados. Un mtodo de una clase puede acceder a todos los dems miembros de la clase (sean pblicos o privados) directamente por su nombre. As mismo, un mtodo puede acceder a otros miembros directamente por su nombre, pero para acceder a un miembro de una clase desde el exterior de dicha clase hay que utilizar el operador punto (.), como ya se ha comentado. Para declarar una variable (un objeto) del tipo de la clase se pone el tipo de la clase y el nombre del objeto, es decir, el nombre de la clase constituye un nombre de un tipo:

NombreClase variable; class DNI { char *nombre; // atributo cadena privado public: int edad, numero; // atributos enteros pblicos void printNombre (void); // mtodo pblico que imprime el atributo nombre void ponNombre (char *); // mtodo pblico que cambia el atributo nombre private: int sexo; // atributo entero privado }; ... DNI obj; // se declara el objeto obj del tipo DNI obj.edad = 2001-1973; // se accede al atributo pblico obj.printNombre(); // se llama a un mtodo pblico

obj.sexo = 0; // error: el atributo sexo es privado


Las operaciones permitidas sobre objetos de una clase son la asignacin de objetos y el acceso a sus miembros pblicos (mediante el operador punto):

DNI yo, tu; // declara las variables yo y tu de tipo DNI yo.ponNombre ("Juan"); // llama al mtodo pblico con una cadena yo.numero = 1234; // asigna un valor al atributo pblico nmero cout << "Introduce la edad"; cin >> yo.edad; // rellena el campo edad con lo que se lea del teclado tu = yo; /* copia el objeto yo en la variable tu */ yo.ponNombre ("Mara"); // llama al mtodo pblico con una cadena tu.printNombre (); // imprime Juan (el atributo nombre de t)

M S I NFORMACIN SOBRE EL L ENGUAJE


Hay que tener en cuenta que para el Proyecto de Compiladores no es necesario tener un conocimiento total de este lenguaje. Tan solo hay que incorporar el funcionamiento del pequeo subconjunto del lenguaje necesario para implementar las partes comunes a todos los grupos que se han explicado aqu, as como las partes obligatorias de cada grupo. Por tanto no hay que incluir todas las caractersticas, variantes y elementos que tiene el lenguaje real, ni ninguno de los cientos de dialectos existentes del lenguaje. Aqu se tiene un ejemplo de un fichero que incorpora la mayora de las funcionalidades descritas en esta pgina, a modo de ejemplo adicional para facilitar su compresin. En cualquier caso, se puede encontrar ms informacin sobre C++ en la pgina de referencias, en los libros que hay en laBiblioteca de la Facultad, as como en cualquier libro, manual o documentacin del lenguaje (buscando en libreras comoAmazon). Tambin se pueden encontrar otras fuentes de informacin realizando bsquedas en la Web o en los siguientes enlaces: Tutoriales de C++: CPlusPlus, Computer Science Sucks, C++ Bsico. FAQ de C++. Introduccin a C++ para programadores en C. Resumen del lenguaje C++. La pgina de Stroustrup sobre C++. Una gramtica de C++. Grupo de trabajo de ISO/IEC sobre C++: Draft del estndar ANSI/ISO de C++ de 1996. Libro "Thinking in C++" en lnea.

MEN

Inicio Normas Temario Bibliografa Horarios Tutoras Exmenes Proyecto Grupos Herramientas Documentacin FAQ Avisos LA WEB W3C: XHTML 1.1 vlido CSS 2.1 vlido Accesibilidad: P. 3 (UNE 139803) AAA (WCAG 1.0) Web Master Accesos:

Mapa ltimo cambio: 23-febrero-2011

También podría gustarte