Trabajo de Informatica
Trabajo de Informática.
Lenguaje C++.
Presentado por:
Gina Duque.
Vanessa Escobar.
Sergio Carrascal.
Jessica Torres.
Francisco Vargas.
Presentado a:
Jose Luís Trespalacios.
Grado 11-01
Martes 15 de Marzo de 2011.
INSTITUTO TÉCNICO CULTURAL DIOCESANO.
Magangué-Bolívar.
Trabajo de Informática.
Introducción…..……………………………………….…………………………………….3
Objetivo.……………………………………………………………………………………...4
Lenguaje C++…………………………………………………………………………………………….5
Conclusión…………………………………………………………………………………11
Bibliografía…………………………………………………………………………………12
Lenguaje C++.
Introducción.
C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.
Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma.
Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir los operadores (sobrecarga de operadores), y de poder crear nuevos tipos que se comporten como tipos fundamentales.
El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C.
Objetivo.
El objetivo del siguiente trabajo, es orientarnos acerca de uno de los lenguajes de programación más usados por las personas hoy en día, y aprender a usar este lenguaje de programación para nuestro beneficio.
Lenguaje C++.
Generalidades
C++ es un lenguaje imperativo orientado a objetos derivado del C [1]. En realidad un superconjunto de C, que nació para añadirle cualidades y características de las que carecía. El resultado es que como su ancestro, sigue muy ligado al hardware subyacente, manteniendo una considerable potencia para programación a bajo nivel, pero se la han añadido elementos que le permiten también un estilo de programación con alto nivel de abstracción
1. Tamaños asociados
Tamaños de tipos primitivos bajo i386 (GCC) | |
Tipo | Número de Bits |
char | 8 |
short | 16 |
int | 32 |
float | 32 |
double | 64 |
Según la máquina y el compilador que se utilice los tipos primitivos pueden ocupar un determinado tamaño en memoria. La siguiente lista ilustra el número de bits que ocupan los distintos tipos primitivos la arquitectura x86.
Otras arquitecturas pueden requerir distintos tamaños de tipos de datos primitivos. C++ no dice nada acerca de cuál es el número de bits en un byte, ni del tamaño de estos tipos; más bien, ofrece solamente las siguientes "garantías de tipos":
§ Un tipo char tiene el tamaño mínimo en bytes asignable por la máquina, y todos los bits de este espacio deben ser "accesibles".
§ El tamaño reconocido de char es de 1. Es decir, sizeof(char) siempre devuelve 1.
§ Un tipo short tiene al menos el mismo tamaño que un tipo char.
§ Un tipo long tiene al menos el doble tamaño en bytes que un tipo short.
§ Un tipo int tiene un tamaño entre el de short y el de long, ambos inclusive, preferentemente el tamaño de un apuntador de memoria de la máquina.
§ Un tipo unsigned tiene el mismo tamaño que su versión signed.
wchar_t
Para la versión del estándar que se publicó en 1998, se decidió añadir el tipo de dato wchar_t, que permite el uso de caracteres UNICODE, a diferencia del tradicional char, que contempla simplemente al código de caracteres ASCII extendido. A su vez, se ha definido para la mayoría de las funciones y clases, tanto de C como de C++, una versión para trabajar con wchar_t, donde usualmente se prefija el carácter w al nombre de la función (en ocasiones el carácter es un infijo). Por ejemplo:
§ strcpy - wstrcpy
§ std::string - std::wstring
§ std::cout - std::wcout
Cabe resaltar que en C se define wchar_t como:
typedef unsigned short wchar_t;Mientras que en C++ es en sí mismo un tipo de dato.
]La palabra clave "void"
La palabra clave void define en C++ el concepto de no existencia o no atribución de un tipo en una variable o declaración. Como tal, puede ser usada para destacar que una función no recibe parámetros, como en:
int funcion (void);2.Principios
Todo programa en C++ debe tener la función
main() (a no ser que se especifique en tiempo de compilación otro punto de entrada, que en realidad es la función que tiene el main())int main()
{}
La función main debe tener uno de los siguientes prototipos:
int main()
int main(int argc, char** argv)
int main(int argc, char** argv, char** env)
int main()
int main(int argc, char** argv)
int main(int argc, char** argv, char** env)
La primera es la forma por omisión de un programa que no recibe parámetros ni argumentos. La segunda forma tiene dos parámetros: argc, un número que describe el número de argumentos del programa (incluyendo el nombre del programa mismo), y argv, un puntero a un array de punteros, de argc elementos, donde el elemento argv[i] representa el i-ésimo argumento entregado al programa. En el tercer caso se añade la posibilidad de poder acceder a las variables de entorno de ejecución de la misma forma que se accede a los argumentos del programa, pero reflejados sobre la variable env.
El tipo de retorno de main es int. Al finalizar la función
main, debe incluirse el valor de retorno (por ejemplo, return 0;, aunque el estándar prevé solamente dos posibles valores de retorno: EXIT_SUCCESS y EXIT_ERROR, definidas en el archivo cstddef), o salir por medio de la función exit. Alternativamente puede dejarse en blanco, en cuyo caso el compilador es responsable de agregar la salida adecuada.3.El concepto de clase
Los objetos en C++ son abstraídos mediante una clase. Según el paradigma de la programación orientada a objetos un objeto consta de:
1. Métodos o funciones
2. Atributos o Variables Miembro
Un ejemplo de clase que podemos tomar es la clase perro. Cada perro comparte unas características (atributos). Su número de patas, el color de su pelaje o su tamaño son algunos de sus atributos. Las funciones que lo hagan ladrar, cambiar su comportamiento... esas son las funciones de la clase.
Este es otro ejemplo de una clase:
class Punto
{
//por omisión los miembros son 'private' para que sólo se puedan modificar desde la propia clase.
private:
// Variable miembro privada int id;protected:
// Variables miembro protegidasint x;
int y;public:
// Constructor
Punto(); // Destructor ~Punto(); // Funciones miembro o métodos int ObtenerX(); int ObtenerY();};
3.1Constructores
Son unos métodos especiales que se ejecutan automáticamente al crear un objeto de la clase. En su declaración no se especifica el tipo de dato que devuelven, y poseen el mismo nombre que la clase a la que pertenecen. Al igual que otros métodos, puede haber varios constructores sobrecargados, aunque no pueden existir constructores virtuales.
Como característica especial a la hora de implementar un constructor, justo después de la declaración de los parámetros, se encuentra lo que se llama "lista de inicializadores". Su objetivo es llamar a los constructores de los atributos que conforman el objeto a construir.
Cabe destacar que no es necesario declarar un constructor al igual que un destructor, pues el compilador lo puede hacer, aunque no es la mejor forma de programar.
Tomando el ejemplo de la Clase Punto, si deseamos que cada vez que se cree un objeto de esta clase las coordenadas del punto sean igual a cero podemos agregar un constructor como se muestra a continuación:
class Punto
{
public:
// Coordenadas del punto float x; float y; // Constructor Punto() : x ( 0 ), y ( 0 ) // Inicializamos las variables "x" e "y" {} };
// Main para demostrar el funcionamiento de la clase
# include <iostream> // Esto nos permite utilizar "cout"
using namespace std;
int main()
{
Punto MiPunto; // creamos un elemento de la clase Punto llamado MiPunto cout << "Coordenada X: " << MiPunto.x << endl; // mostramos el valor acumulado en la variable x cout << "Coordenada Y: " << MiPunto.y << endl; // mostramos el valor acumulado en la variable y return 0;}
Si compilamos y ejecutamos el anterior programa, obtenemos una salida que debe ser similar a la siguiente:
Coordenada X:0 Coordenada Y:0
Existen varios tipos de constructores en C++:
1. Constructor predeterminado. Es el constructor que no recibe ningún parámetro en la función. Si no se definiera ningún constructor, el sistema proporcionaría uno predeterminado. Es necesario para la construcción de estructuras y contenedores de la STL.
2. Constructor de copia. Es un constructor que recibe un objeto de la misma clase, y realiza una copia de los atributos del mismo. Al igual que el predeterminado, si no se define, el sistema proporciona uno.
3. Constructor de conversión. Este constructor, recibe como único parámetro, un objeto o variable de otro tipo distinto al suyo propio. Es decir, convierte un objeto de un tipo determinado a otro objeto del tipo que estamos generando.
Constructores + Memoria heap Un objeto creado de la forma que se vio hasta ahora, es un objeto que vive dentro del scope(las llaves { }) en el que fue creado. Para que un objeto pueda seguir viviendo cuando se saque de el scope en el que se creó, se lo debe crear en memoria heap. Para esto, se utiliza el operador new, el cual asigna memoria para almacenar al objeto creado, y además llama a su constructor(por lo que se le pueden enviar parametros). El operador new se utiliza de la siguiente manera:
int main() {
Punto *unPunto = new Punto(); //esto llama al contructor que se describe más arriba delete unPunto; //no hay que olvidarse de asignar la memoria ocupada por el objeto(ver la sección destructores, más abajo) return 0;}
Además, con el operador new[] se pueden crear arreglo de tamaño dinámico:
Punto *asignar(int cuantos) { return new Punto[cuantos]; //asigna un arreglo de 'cuantos' puntos(se llama el constructor que se muestra más arriba), y se retorna.}
3.2Destructores
Los destructores son funciones miembro especiales llamadas automáticamente en la ejecución del programa, y por tanto no tienen por qué ser llamadas explícitamente por el programador. Sus principales cometidos son:
§ Liberar los recursos computacionales que el objeto de dicha clase haya adquirido en tiempo de ejecución al expirar éste.
§ Quitar los vínculos que pudiesen tener otros recursos u objetos con éste.
Los destructores son invocados automáticamente al alcanzar el flujo del programa el fin del ámbito en el que está declarado el objeto. El único caso en el que se debe invocar explícitamente al destructor de un objeto, es cuando éste fue creado mediante el operador new, es decir, que éste vive en memoria heap, y no en la pila de ejecución del programa. La invocación del destructor de un objeto que vive en heap se realiza a través del operador delete o delete[] para arreglos. Ejemplo:
int main() {
int *unEntero = new int(12); //asignamos un entero en memoria heap con el valor 12 int *arregloDeEnteros = new int[25]; //asignamos memoria para 25 enteros(no estan inicializados) delete unEntero; //liberamos la memoria que ocupaba unEntero delete[] arregloDeEnteros; //liberamos la memoria ocupada por arregloDeEnteros return 0;}
Si no se utilizara el operador delete y delete[] en ese caso, la memoria ocupada por unEntero y arregloDeEnteros respectivamente, quedaría ocupada sin sentido. Cuando una porcion de memoria queda ocupada por una variable que ya no se utiliza, y no hay forma de acceder a ella, se denomina un 'memory leak'. En aplicaciones grandes, si ocurren muchos memory leaks, el programa puede terminar ocupando bastante más memoria RAM de la que debería, lo que no es para nada conveniente. Es por esto, que el manejo de memoria heap debe usarse conscientemente.
Existen dos tipos de destructores pueden ser públicos o privados, según si se declaran:
§ Si es público se llama desde cualquier parte del programa para destruir el objeto.
§ Si es privado no se permite la destrucción del objeto por el usuario.
4. Diferencias de tipos respecto a C
En C++, cualquier tipo de datos que sea declarado completo (fully qualified, en inglés) se convierte en un tipo de datos único. Las condiciones para que un tipo de datos T sea declarado completo son a grandes rasgos las siguientes:
§ Es posible al momento de compilación conocer el espacio asociado al tipo de datos (es decir, el compilador debe conocer el resultado desizeof(T)).
§ T Tiene al menos un constructor, y un destructor, bien declarados.
§ Si T es un tipo compuesto, o es una clase derivada, o es la especificación de una plantilla, o cualquier combinación de las anteriores, entonces las dos condiciones establecidas previamente deben aplicar para cada tipo de dato constituyente.
En general, esto significa que cualquier tipo de datos definido haciendo uso de las cabeceras completas, es un tipo de datos completo.
En particular, y, a diferencia de lo que ocurría en C, los tipos definidos por medio de struct o enum son tipos completos. Como tales, ahora son sujetos a sobrecarga, conversiones implícitas, etcétera.
Los tipos enumerados, entonces, ya no son simplemente alias para tipos enteros, sino que son tipos de datos únicos en C++. El tipo de datos bool, igualmente, pasa a ser un tipo de datos único, mientras que en C funcionaba en algunos casos como un alias para alguna clase de dato de tipo entero.
Compiladores
Uno de los compiladores libres de C++ es el de GNU, el compilador G++ (parte del proyecto GCC, que engloba varios compiladores para distintos lenguajes). Otros compiladores comunes son Intel C++ Compiler, el compilador de Xcode, el compilador de Borland C++, el compilador de CodeWarrior C++, el compilador g++ de Cygwin, el compilador g++ de MinGW, el compilador de Visual C++, Carbide.c++, entre otros.
Conclusión.
A partir de este trabajo, podimos darnos cuenta de la gran importancia y necesidad en que radica el Lenguaje C++, y del éxito rotundo que ha tenido, con mecanismos que permiten la manipulación de objetos.
Bibliografía