Documentos de Académico
Documentos de Profesional
Documentos de Cultura
75 - 80
CLASES DE DATOS
Edgar Ruiz Lizama1
edgar.ruiz@industrial.unmsm.pe
RESUMEN
El artículo presenta un enfoque moderno acerca del estudio de los tipos de datos soportados por un
computador. Para el lenguaje C++, los datos se agrupan en clases de datos los cuales se estudian y
se prueban con programas ejemplos.
ABSTRACT
This article presents a modern focus about the study of the types of data supported by a computer.
For de language C++, the data group in classes of data wich are studied and they are proven with
programs example.
INTRODUCCION
Al igual que C; C++ posee tipos de datos fundamentales o primitivos y tipos de datos
derivados o estructurados. A decir verdad, un enfoque más moderno conceptualiza los tipos de datos
en C++ como correspondientes a clases de datos, siendo estos agrupados en: clase escalar, clase
estructurada y clase apuntador o puntero. Ver figuras 1, 2, 3, y 4.
C++
Clase Clase
Clase escalar
estructurada apuntador
Clase
Escalar
Clase Clase
Estandar Enumerada
1
Actualizado por el autor el 06 de Agosto de 2014; para CodeBlocks 13.12
Edgar Ruiz Lizama 1
Volumen 3 Nº 1 INDUSTRIAL DATA Pag. 75 - 80
Clase
Estructurada
Registro o
Arreglo class
struct
Clase
Apuntador
LA CLASE ESCALAR
La clase escalar como acabamos de ver se divide en clase estándar y clase enumerada. La
clase estándar a su vez se subdivide en cuatro clases: entero, flotante, caracter y booleana.
CLASE ENTERO
Debido a que cada valor que se representa en un computador ocupa una determinada
cantidad en bytes (1 byte = 8 bit) y por cuestiones de eficiencia en el procesamiento; C++ posee
clases de enteros tales como short int, int, unsigned int, long int y unsigned long; tal como puede
verse en la tabla 1
Según el propio Bjarne Stroustrup, la razón para ofrecer más de un tipo entero, más que un
tipo sin signo y más que un tipo de coma flotante es permitir que el programador aproveche las
características del hardware. En muchas máquinas, hay diferencias significativas en los
requerimientos de memoria, tiempo de acceso y velocidad de cálculo entre las variedades de tipos
básicos de datos. Si el programador conoce una máquina le resulta más fácil elegir, el entero
apropiado para una variable en particular, y en contrapartida el compilador no encuentra errores al
realizar la verificación de tipos2.
Resumiendo diré que el tamaño en bytes para un tipo de datos depende de la implementación
o versión del compilador y de la máquina en uso, por lo que los valores de la Tabla 1; podrían ser
diferentes en su máquina. Al respecto, lo animo a probar el ejemplo 1, que sigue a continuación.
Ejemplo 1: El programa Bytes1.cpp realiza la comprobación del tamaño en bytes para la clase entero.
#include <iostream>
// mostrar el uso de la funcion sizeof
using namespace std;
La función sizeof es una función predefinida en C y devuelve el tamaño en bytes del objeto
pasado como argumento. Adicionalmente, se puede comentar que sizeof para C++ es un
operador predefinido.
#include <iostream>
#include <climits> /* Para las constantes limites definidas
en los rangos de la clase Entero */
using namespace std;
2
Un buen programador prevé los posibles valores que asumirán las variables de sus programas al entrar en
ejecución por lo que elige el tipo de dato adecuado, consiguiendo con ello programas más eficientes y efectivos.
Edgar Ruiz Lizama 3
Volumen 3 Nº 1 INDUSTRIAL DATA Pag. 75 - 80
cout<<"Enteros Maximos y minimos"<<endl<<endl;
cout<<"Entero sin signo maximo\t\t"<<UINT_MAX;
cout<<"\nEntero corto con signo maximo\t"<<SHRT_MAX;
cout<<"\nEntero corto con signo minimo\t"<<SHRT_MIN;
cout<<"\nEntero largo con signo minimo\t"<<LONG_MIN;
cout<<"\nEntero largo con signo maximo\t"<<LONG_MAX;
cout<<"\nEntero con signo maximo\t\t"<<INT_MAX;
cout<<"\nEntero con signo minimo\t\t"<<INT_MIN;
cout<<endl;
return 0;
}
Observe que en el programa rangos1.cpp se incluye la librería <limits> puesto que en ella se
encuentran definidas las constantes para los valores máximos y mínimos de los tipos de datos.
CLASE FLOTANTE
En términos matemáticos el conjunto de los números reales incluye a todos aquellos valores
cuya representación necesita el punto decimal y que van desde - hasta +. En notación sintáctica
BNF (Backus-Naur Form) un número real se representa como:
la cual se lee del siguiente modo: un número real es un signo + ó un signo - seguido de un entero
seguido, de un punto, seguido de un entero; donde entero puede ser un dígito decimal o una
secuencia de dígitos decimales. A su vez; entero y digito decimal son:
La clase flotante en C++, incluye a todos los enteros y a todo aquel valor que para su
representación necesita del punto decimal; tal como por ejemplo los números: 1.0, 15.24, -4.05, y
3.2728.
La tabla 2 muestra los tipos soportados por la clase flotante: float, double, long
double.
#include <iostream>
// Numero de bytes en la clase flotante
using namespace std;
int main() // Bytes2.cpp
{
cout<<"Numero de Bytes para los flotantes\n"<<endl;
cout<<"Un float tiene\t\t"<<sizeof(float)<<" Bytes"<<endl;
cout<<"Un double tiene\t\t"<<sizeof(double)<<" Bytes"<<endl;
cout<<"Un long double tiene\t"<<sizeof(long double)<<" Bytes\n"<<endl;
return 0;
}
CLASE CARACTER
El ASCII es un conjunto que posee 256 códigos (0 al 255); donde cada código es un byte y a
cada código o carácter le corresponde un número, por ello se dice que los caracteres ASCII son
ordinales. La tabla 3 muestra los dos objetos de la clase caracter en C++: char y unsigned char;
caracteres con signo y caracteres sin signo
La tabla 3, indica que los tipos de datos de la clase caracter se representan en 1 byte de
memoria.
#include <iostream>
// numero de bytes en la clase caracter
using namespace std;
Ejemplo 5: El programa carascii.cpp muestra los caracteres alfabéticos tanto en mayúsculas como en
minúsculas y sus correspondientes valores ASCII.
#include <iostream>
#include <ctype.h>
using namespace std;
Todo objeto booleano, posee sólo uno de dos valores; true (verdad) y false (falso). Estos
tienen gran importancia en todo programa que utiliza toma de decisiones es decir; una decisión
implica evaluar una condición y dependiendo del resultado (verdad o falso) se toma una acción o
camino a seguir. La clase bool de C++, define false y true de tal forma que false siempre es
menor que true. Los booleanos se almacenan en un byte de memoria. En general para todo
programa C/C++, false = 0 y true = 1. Ver el ejemplo 6.
#include <iostream>
//usando la clase bool
using namespace std;
int main() //boolea_0.cpp
{
cout<<"Objetos de la clase bool\n"<<endl;
cout<<"Valor de false = "<< false <<endl;
cout<<"Valor de true = "<< true <<endl;
return 0;
}
A partir de la clase bool es posible crear variables de tipo booleano como son las llamadas
banderas lógicas, muy usadas por los programadores en cuestiones de decisión.
Ejemplo 7: El siguiente programa boolea1.cpp declara bandera como un objeto de la clase bool y lo
inicializa a true, luego se niega el valor de bandera.
#include <iostream>
using namespace std;
int main() // boolea_1.cpp
{
bool bandera;
bandera = true;
cout<<"Valor de bandera =\t"<<bandera<<endl;
cout<<"Negacion de bandera =\t"<<(!bandera)<<endl;
return 0;
}
Ejemplo 8: Implementación de objetos booleanos como constantes simbólicas al estilo del lenguaje C.
#include <iostream>
/* constantes simbolicas al estilo del C */
#define FALSE 0
#define TRUE 1
using namespace std;
int main() // Boolea_2.cpp
{
int a, b;
cout<<"ingrese dos numeros: ";
cin>>a>>b;
cout<<"a = "<<a<<" b = "<<b<<endl;
if ( a > b )
cout<<"a es mayor que b; valor logico: "<<TRUE<<endl;
else
cout<<"a No es mayor que b; valor logico: "<<FALSE<<endl;
cout<<endl;
return 0;
}
#include <iostream>
#include <stdlib.h>
// Constantes al estilo del C++
const int FALSE = 0;
const int TRUE = 1;
using namespace std;
int main() // Boolea_3.cpp
{
int a,b;
cout<<"ingrese dos numeros: ";
cin>>a>>b;
cout<<endl;
if ( a > b )
cout<<a<<" Si es mayor que "<<b<<"; valor logico: "<<TRUE<<endl;
else
cout<<a<<" No es mayor que "<<b<<"; valor logico: "<<FALSE<<endl;
cout<<endl;
return 0;
}
CLASE ENUM
La clase enum es heredada del C. Esta clase permite al usuario declarar y usar tipos
enumerados en sus programas. La declaración de datos enumerados se realiza con la palabra
reservada enum, siendo su formato el siguiente,
<identificador_clase> <identificador_objeto>;
Los objetos de la clase enum son ordinales y el compilador C/C++, asigna por defecto el valor
0 al primer objeto, 1 al segundo objeto y así sucesivamente. Por ello es que a los objetos de esta
clase se les puede aplicar operaciones relacionales tal como se ve en los ejemplos 10 y 11.
En el programa enum1.cpp del ejemplo 10, se declara Semana como un conjunto de siete
objetos enumerados y especificados dentro de las llaves; es decir la secuencia
{DOM,LUN,MAR,MIER,JUE,VIE,SAB}. Una vez hecho esto; se declara dia como una variable del
tipo Semana. Observe que el primer objeto enumerado DOM se establece a 0, el segundo LUN se
establece a 1, MAR se establece a 2 y así sucesivamente. Por esto, se dice que los objetos de un
conjunto enumerado son ordinales; es decir tienen un orden por lo que pueden establecerse
operaciones relacionales con estos objetos.
#include <iostream>
// Trabajando con objetos enumerados
enum Semana{DOM,LUN,MAR,MIER,JUE,VIE,SAB};
Semana dia; // dia es variable del tipo semana
using namespace std;
int main() // enum_1.cpp
{
cout << "Dias de la semana" << endl;
for (int dia = DOM; dia <= SAB;dia++)
switch(dia) {
case 0: cout<<"\n El dia domingo es "<<dia<<endl;
break;
Como puede haber observado el primer objeto de una lista de enumerados se establece a 0,
el segundo a 1 ya si sucesivamente; pero el usuario puede cambiar esta asignación por defecto
haciendo que el primer objeto se establezca a 1 (o a cualquier otro valor ordinal) en la propia
declaración. Al respecto el ejemplo 11 muestra una variante del ejemplo anterior
Ejemplo 11:
#include <iostream>
//observe que DOM comienza en 1
enum Semana{DOM = 1, LUN, MAR, MIER, JUE, VIE, SAB};
Semana dia; // dia es variable del tipo semana
#include <iostream>
//objetos booleanos con enum
enum Bool{ FALSE, TRUE };
REFERENCIAS
1. Deitel H.M. y Deitel P.J. (2003) "C++ Cómo Programar". 4ta. Edición. Prentice-Hall
Hispanoamericana, 1320p. México.
2. Kernighan Brian W. & Ritchie Dennis M. (1993) “El Lenguaje de Programación C”. 2da.
Edición. Prentice-Hall Hispanoamericana, 294 p. México.
3. Ruiz Lizama, Edgar (2009) "Programación con C++", 1ra. Edición, Fondo Editorial de la
Universidad Nacional Mayor de san Marcos, 434 p. Lima, Perú.
4. Ruiz Lizama, Edgar (1999) "Curso de Lenguaje C", Universidad Nacional Mayor de san Marcos,
Facultad de Ingeniería Industrial, 150 p. Lima, Perú.
5. Staguaard, Andrew (1998) "Técnicas estructuradas y orientadas a objetos: una introducción
utilizando C++". México. Prentice-Hall Hispanoamericana, 770 p. México.
6. Stroustrup, Bjarne (2002) "El Lenguaje de Programación C++ Edición especial". Addison
Wesley – PEARSON EDUCACION S.A. 1050 p. España.
7. Stroustrup, Bjarne (1993) "El Lenguaje de Programación C++". 2da. Edición. Addison Wesley
Iberoamericana. 710 p. E.U.A.