You are on page 1of 30

Programacin Orientada a Objetos

Tema 2: Elementos Bsicos de la programacin en el lenguaje C (Variables) Dr. Rogelio Silverio Castro Dpto. de Ciencias de la Computacin Facultad de Matemtica Fsica y Computacin Universidad Central Marta Abreus de Las Villas

Variables
Variable es un nombre mediante el cual, en el programa se hace referencia a una zona de memoria en la que se almacena informacin. informacin. Declaracin de variables: variables: Tipo lista_de_variables; lista_de_variables; Ejemplos: Ejemplos: Int i,j,k; i,j,k; Short int si; si; Unsigned int i; Double bal, ben, per; per;

Tipos del C++


Tipos bsicos  char  int  double  float  void  bool  wchart_t Modificadores  signed  unsigned  long  short

Clasificacin de las variables en base al lugar en que se declaran


 

Locales. Se declaran dentro de las funciones Locales. Globales. Se declaran fuera de todas las Globales. funciones Parmetros. Se declaran en la lista de Parmetros. parmetros formales de las funciones

Modificadores de acceso
Los modificadores de acceso son palabras claves que le indican al sistema la forma que se accedern o modificarn las variables.  Const indica que el contenido de la variable no puede ser modificado durante la ejecucin del programa.  Volatile indica que el valor de la variable sera modificado por medios no especificados en el programa. Nota. Las variables que no tengan en su declaracin los modificadores de accesos son variables normales

Especificaciones de almacenamiento
Las especificaciones de almacenamiento son palabras claves que le indican al compilador como debe almacenar las variables.  extern  static  register  auto Sintaxis: Especificador_de_almacenamiento tipo n_de_variable

Especificacin de almacenamiento extern


Permite que dentro de un mdulo se puedan utilizar variables globales declaradas en otro mdulo
#include <iostream.h> #include "eee0.cpp" int x; char c; int func1(); void main() {cout << "RESULTADOS" <<endl << func1() << endl << func2() << endl <<func3(); } int func1() { x=12;y=12; return(x+y); }

Archivo eee0 int y; extern int x; int func2() {y=23; return(y); } int func3() { x=10; return(x); }

Especificacin de almacenamiento extern


Si en el archivo eee.cpp no se define a la variable tipo char c como extern se tendr un error de compilacin, pues esta declarada en otro mdulo
#include <iostream.h> <iostream. #include "eee1.cpp" "eee1 int x; char c; int func1(); func1(); void main() {cout << "RESULTADOS" <<endl << func1() func1 << endl << func2() func2 << endl <<func3(); <<func3(); } int func1() func1 { x=12;y=12; x=12;y=12; return(x+y); return(x+y); } archivo eee1 int y; extern int x; int func2() {y=23; return(y); } char func3() { c='C'; return(c);}

Especificacin de almacenamiento static


Las variables estticas se caracterizan por ser variables permanentes dentro de su propia funcin u archivo.  En el caso de una variable local esttica la misma mantiene su valor para cuando se vuelva a entrar a la funcin, sin embargo su valor no puede ser accedido fuera de la funcin en la cual esta declarada.  En el caso de una variable global esttica su valor solo ser conocido en el archivo donde esta declarada y no podr ser utilizada por funciones de otros archivos.

Especificacin de almacenamiento static para variables locales. Ejemplo1


#include <iostream.h> int series1() {static int num ; num = num+1; return (num); } int series2() {static int num=10; num = num+1; return (num); } void main() {cout << "RESULTADOS SERIE1" <<endl << series1() << endl << series1() << endl << "RESULTADOS SERIE2" << endl <<series2() << endl << series2(); }

Especificacin de almacenamiento static para variables locales. Ejemplo2


#include <iostream.h> int s1,s11,s2,s22; int series1() {static int num ; num = num+1; return (num); } int series2() {static int num=10; num = num+1; return (num); } void main() {s1 = series1(); s11 = series1(); s2 = series2(); s22 = series2(); cout << "RESULTADOS SERIE1" <<endl << s1 << endl << s11 << endl << "RESULTADOS SERIE2" << endl <<s2 << endl << s22;}

Especificacin de almacenamiento static para variables globales. Ejemplo


#include <iostream.h> static int num; int series() { num = num+23; return (num); }
#include <iostream.h> int series(); void main() {cout << "RESULTADOS SERIE" <<endl << series(); }

Especificacin de almacenamiento register




La especificacin register establece que el acceso a a los objetos sea lo mas rpido posible. En esencia esta especificacin es una indicacin al compilador de que estas variables van a ser fuertemente utilizadas. La especificacin register solo se puede aplicar a variables locales y a parmetros formales de una funcin. En general este tipo de variables son ideales para el control de bucles

Especificacin de almacenamiento auto




La especificacin del tipo de almacenamiento automtico esta implcita en la declaracin de cualquier variable y la misma significa que dichas variables existen mientras el bloque donde estn declaradas este activo

Arreglos
Un arreglo es una coleccin de variables del mismo tipo que se referencian por un nombre comn. A un comn. elemento especifico de un arreglo se accede mediante un ndice. ndice.  Sintaxis: Sintaxis: tipo nombre_de _variable[tamao] _variable[tamao]  Ejemplo double balance [100] 100]


Arreglos y parmetros de funciones




Los arreglos no pueden pasarse como parmetros a las funciones. Sin embargo se puede pasar un funciones. puntero a un arreglo especificando el nombre del mismo sin ndice. ndice. Ejemplo.
void main() { int a[10]; func1(a); . . }

Arreglos


La funcin func1() se puede declarar de las func1 siguientes formas: formas:


void func1(int *x) /* como puntero*/ func1 {. .. } void func1(int x[10]) /*arreglo delimitado*/ {. .. } void func1(int x[]) /* arreglo no delimitado*/ {. .. }

Variables tipo puntero (Punteros)


Las variables tipo puntero (o punteros) son aquellas cuyo contenido ser una direccin de memoria. La memoria. direccin que contiene la variable tipo puntero es la de otro objeto, generalmente la de otra variable. variable.  Declaracin de variables tipo puntero Sintaxis tipo *nombre Ejemplo char *c0, c1,*c2; *c0 ,*c2 Aqu c0 y c2 son apuntadoras a una variable tipo char y c1 es del tipo char


Operadores de punteros
Operador &. Devuelve la direccin de memoria de una variable. variable.  Operador *. Devuelve el contenido de la variable cuya direccion esta en la variable tipo puntero. puntero. Ejemplo. Ejemplo. Int *px,x,y,z *pp; /* se declaran x,y,z enteras y px como apuntador a entero*/ *pp; x=2 x=2; px=&x; px=&x; y=x; y=x; z=*px; pp=px; z=*px; pp=px; Como resultado de las instrucciones anteriores se tiene que: que:


x contiene un 2; si la direccion de x es por ejemplo100 px contiene 200 ejemplo100 y contiene un 2 z tambien contiene un 2 pp apunta a donde apunta px

Operadores de punteros (cont.)


Aunque la longitud de las direcciones y por lo tanto de las variables tipo puntero son iguales se debe lograr que las variables tipo puntero apunten siempre al tipo de datos correcto. Por ejemplo Operador & devuelve la direccin de correcto. memoria de una variable pero el resultado no debe asignarse a una variable apuntadora de otro tipo. tipo.

#include <iostream. h>


void main() { int *p; float x,y,z; x=23.5; y=x; p=&x; z=*p; cout << endl <<y << endl << p << endl <<z; }

#include <iostream. h>


void main() { int *p,x,y,z; x=23.5; y=x; p=&x; z=*p; cout << endl <<y << endl << p << endl <<z; }

Aritmtica de punteros
Las dos operaciones que se pueden realizar con punteros son: son:  Sumarles y restarles enteros (en particular el incremento y el decremento). decremento). Cuando se suma ( o se resta) un entero a un puntero el valor que se suma (o se resta ) es el producto de dicho entero por la longitud del tipo base. base.  La resta de un puntero de otro. Esta operacin da como resultado el otro. nmero de objetos del tipo base que separan a ambos punteros Adems de estas operaciones los punteros se pueden comparar en una expresin relacional. Por ejemplo, dados los punteros p y q, la relacional. siguiente expresin es completamente vlida. vlida. If (p<q) cout << p apunta a menor memoria que q ;

Aritmtica de Punteros (Ejemplo de incremento)


#include <iostream.h> void main() { int *p,x,y,; x=2000; p=&x; cout << endl << "p"<< endl << p << endl; p++; cout << endl << "p" << endl<< p << endl; y=*p; cout << endl <<"y" <<endl << y;}

Resultados de la ejecucin p 0x1aca p ox1acc y 6870

Funcin Main para pilas sobre un arreglo utilizando la indexacin


void main() { char c1; cout << "\n\n teclee F para terminar o cualquier otro smbolo para continuar\n"; "\ continuar\ cin >> c1 ; tope= -1; while (c1 != 'F') { cout << "\n\n teclee I para insertar, M para mirar y E para eliminar\n"; "\ eliminar\ cin >> c1 ; switch(c1) {case 'I': cout << endl << "entre el valor a insertar" << endl; cin >> x; push( x);break; case 'M': x=top(); cout<< x; break; case 'E':cout << endl << tope; pop(); cout << endl << tope;break; default:; } cout << "\n\n teclee F para terminar o cualquier otro smbolo para continuar\n"; "\ continuar\ cin >> c1 ; }; cout << "\n Hasta Luego\n";} "\ Luego\

Funciones para el manejo de pilas sobre un arreglo utilizando la indexacin


#include <iostream.h> #define tam 50 float pila[tam];int tope;float x; void push(float x) {if (tope+1 == tam) cout<< "overflow"; else {tope++; pila[tope]=x; } } void pop() { tope--;} tope--;} float top() {return(pila[tope]);}

Funcin Main para pilas sobre un arreglo utilizando la aritmtica de punteros


void main() { char c1; cout << "\n\n teclee F para terminar o cualquier otro smbolo para continuar\n"; "\ continuar\ cin >> c1 ; tope= pila-1; p1 = pila-1; pilapilawhile (c1 != 'F') { cout << "\n\n teclee I para insertar, M para mirar y E para eliminar\n"; "\ eliminar\ cin >> c1 ; switch(c1) {case 'I':cout << endl << "entre el valor a insertar" << endl; cin >> x;push( x);break; case 'M': x=top(); cout<< x; break; case 'E':cout << endl << tope; pop();cout << endl << tope;break; default: ; } cout << "\n\n teclee F para terminar o cualquier otro smbolo para continuar\n"; "\ continuar\ cin >> c1 ; }; cout << "\n Hasta Luego\n"; "\ Luego\ }

Funciones para el manejo de pilas sobre un arreglo utilizando la aritmtica de punteros


#include <iostream.h> #define tam 50 float pila[tam];float *tope,*p1;float x; void push(float x) { if ((tope - p1) == tam) cout<< "overflow"; else {tope++; *tope=x; } } void pop() { tope--;} tope--;} float top() {return(*tope);}

Transferencias de parmetros a una funcin

Existen dos formas de parmetros a una funcin. funcin.  Llamada por valor  Llamada por referencia. referencia.

pasar

los

Transferencias de parmetros a una funcin. Llamada por valor


#include <iostream.h>/ void cambia(int x,int y) { int temp; cout << endl <<" cambia(), Antes: x = " << x << " y " <<y; temp = x; x = y; y = temp; cout << endl <<" cambia(), Despus: x = " << x << " y " << y; } void main() { int a=10, b=20; cout << endl <<" Antes: a = " << a << " b= " << b; cambia ( a,b); cout << endl <<" Despus: a = " << a << " b= " << b; }

Transferencias de parmetros a una funcin. Llamada por referencia


#include <iostream.h>/ void cambianuevo(int *x,int *y) { int temp; cout << endl <<" cambianuevo(), Antes: x = " << *x << " y " <<*y; temp = *x; *x = *y; *y = temp; cout << endl <<" cambianuevo(), Despus: x = " << *x << " y " << *y; } void main() { int a=10, b=20; cout << endl <<" Antes: a = " << a << " b= " << b; cambianuevo ( &a,&b); cout << endl <<" Despus: a = " << a << " b= " << b; }

Punteros y asignacin dinmica de memoria




Las variables tipo puntero se inicializan automticamente cuando a las mismas de le asigna el resultado de alguna funcin de asignacin dinmica de memoria tal como la funcin malloc(n). malloc(n). La funcin malloc() de la biblioteca estndar de C se utiliza para asignar dinmicamente n bytes de memoria contiguos sin inicializar. Si la llamada tiene inicializar. xito se devuelve un puntero al primer Byte del bloque de memoria asignado, en caso contrario se devuelve el punteo nulo (0) Ejemplo: Ejemplo: float* ptr; ptr; ptr =(float*) malloc(10 * sizeof(float)); malloc(10 sizeof(float));

You might also like