








































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Los mejores documentos en venta realizados por estudiantes que han terminado sus estudios
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Descubre las mejores universidades de tu país según los usuarios de Docsity
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Una guía de programación en C para guiar a estudiantes de universidad.
Tipo: Guías, Proyectos, Investigaciones
1 / 48
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!
Apoyo a la Investigación C.P.D. Servicios Informáticos U.C.M.
C++ es una mejoría sobre muchas de las características de C, y proporciona capacidades de P.O.O. que promete mucho para incrementar la productividad, calidad y reutilización del software.
En C , la unidad de programación es la función , con lo cual, se trata de una programación orientada a la acción.
En C++ , la unidad de programación es la clase a partir de la cual, los objetos son producidos. Se trata, pues, de una programación orientada al objeto.
Las bibliotecas estándar de C++ proporcionan un conjunto extenso de capacidades de entrada/salida. C++ usa entradas/salidas de tipo seguro; no podrán introducirse datos equivocados dentro del sistema.
Se pueden especificar entradas/salidas de tipos definidos por el usuario, así como de tipos estándar. Esta extensibilidad es una de las características más valiosas de este lenguaje de programación.
C++ permite un tratamiento común de entradas/salidas de tipos definidos por usuario. Este tipo de estado común facilita el desarrollo de software en general y de la reutilización de software en particular.
La salida de flujo puede ser ejecutada mediante el operador de inserción de flujo : <<. Se hace la homonimia del operador << para extraer elementos de datos de tipos incorporados, para extraer cadenas y para extraer valores de apuntadores.
Ejemplo:
// Programa que muestra mensaje de bienvenida a C++. // Salida de una cadena usando inserción de flujo.
main( ) { cout <<''¡ Bienvenido a C++! \n''; return 0; }
Dichos operadores se pueden concatenar.
Todas las palabras claves de C++ están en minúsculas. En C++, las mayúsculas y minúsculas son diferentes.
A continuación se muestra dos tablas de palabras reservadas en C++ :
C y C++ auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
C++ únicamente
asm Medio definido por la puesta en práctica de lenguaje de ensamble a lo largo de C++. ( Vea los manuales correspondientes a su sistema). catch Maneja una excepción generada por un throw. class Define una nueva clase. Pueden crearse objetos de esta clase. delete Destruye un objeto de memoria creado con new.
friend Declara una función o una clase que sea un ''amigo'' de otra clase. Los amigos pueden tener acceso a todos los miembros de datos y a todas las funciones miembro de una clase. inline Avisa al compilador que una función particular deberá ser generada en línea, en vez de requerir de una llamada de función. new Asigna dinámicamente un objeto de memoria en la memoria adicional disponible para el programa en tiempo de ejecución. Determina automáticamente el tamaño del objeto. operator Declara un operador ''homónimo''. private Un miembro de clase accesible a funciones miembro y a funciones friend de la clase de miembros private. protected Una forma extendida de acceso private ; también se puede tener acceso a los miembros protected por funciones miembro de clases derivadas y amigos de clases derivadas. public Un miembro de clase accesible a cualquier función. template Declara cómo construir una clase o una función, usando una variedad de tipos. this Un apuntador declarado en forma implícita en toda función de miembro no static de una clase. Señala al objeto al cual esta función miembro ha sido invocada. throw Transfiere control a un manejador de excepción o termina la ejecución del programa si no puede ser localizado un manejador apropiado. try Crea un bloque que contiene un conjunto de números que pudieran generar excepciones, y habilita el manejo de excepciones para cualquier excepción generada. virtual Declara una función virtual.
2.4. PROTOTIPOS DE FUNCION Y VERIFICACION DE TIPO
C++ requiere que se declaren todos los parámetros de función en los paréntesis de la definición de función y del prototipo. Una lista vacía de parámetros se especifica escribiendo void o absolutamente nada en los paréntesis.
2.5. FUNCIONES EN LINEA
Existen funciones en línea que ayudan a reducir la sobrecarga por llamadas de función especial para pequeñas funciones. El compilador puede ignorar el calificador inline y típicamente así lo hará para todo, a excepción de las funciones más pequeñas. El calificador inline deberá ser utilizado sólo tratándose de funciones pequeñas, de uso frecuente. Usa funciones inline puede reducir el tiempo de ejecución, pero puede aumentar el tamaño del programa.
Ejemplo:
// Usamos la función inline para calcular el volumen de un cubo.
#include <iostream.h>
inline float cubo( const float s ) { return s * s * s; }
main( ) { cout << ''Introduce la longitud del lado de tu cubo: ''; float lado; cin >> lado; cout << ''El volumen del cubo de lado '' << lado << ''es'' << cubo( lado ) << '\n';
return 0; }
2.6. PARAMETROS POR REFERENCIA
C++ ofrece parámetros por referencia. Un parámetro de referencia es un seudónimo (''alias'') de su argumento correspondiente. Para indicar que un parámetro de función es pasado por referencia, sólo hay que colocar un ampersand (&) después del tipo del parámetro en el prototipo de función.
Debemos usar apuntadores para pasar argumentos que pudieran ser modificados por la función llamada, y usar referencias a constantes para pasar argumentos extensos, que no serán modificados.
Las variables de referencia deben ser inicializadas en sus declaraciones , y no pueden ser reasignadas como seudónimos a otras variables.
Cuando se regresa un apuntador o una referencia a una variable declarada en la función llamada, la variable deberá ser declarada static dentro de dicha función.
Las referencias pueden ser usadas como argumentos de funciones y regresar valores.
Ejemplo:
int ix; /* ix es la variable ''real'' / int &rx = ix; / rx es el ''alias'' de ix / ix = 1; / también rx == 1 / rx = 2; / también ix == 2 */
2.7. EL CALIFICADOR CONST
El calificador const se usa en la lista de parámetros de una función para especificar que un argumento pasado a la función no es modificable en dicha función. También puede ser utilizado para declarar las llamadas ''variables constantes''. Estas pueden ser colocadas en cualquier parte en que se espere una expresión constante. También en archivos de cabecera.
La variable constante debe ser inicializada al declararse.
Otro uso común para el calificador const es para poder declarar un apuntador constante.
Tabla con expresiones de declaración de constantes:
DECLARACION NOMBRE ES... const tipo nombre = valor ; Tipo constante.
tipo *const nombre = valor ; Apuntador constante a tipo. const tipo *nombre = valor ; (Variable) apuntador a la constante tipo.
const tipo *const nombre = valor ; Apuntador constante a tipo constante.
Ejemplo:
// Definimos dos funciones distintas max ( ), una que regrese el mayor de // dos enteros y otra que regrese el mayor de dos strings.
#include <stdio.h> int max( int a, int b ) { if ( a > b ) return a; return b; } char *max( char *a, char *b ) { if ( strcmp (a,b) > 0 ) return a; return b; } int main( ) { printf ( ''max( 19, 69 ) = %d\n'', max( 19, 69 ) ); printf ( ''max( abc,def ) = %s\n'', max( ''abc'',''def'' ) ); return 0; }
El programa del ejemplo define dos funciones que difieren en su lista de parámetros, de ahí que defina dos funciones distintas.
Las referencias se pueden usar para proveer una función con un alias de un argumento real de llamada de función. Esto permite cambiar el valor del argumento de llamada de función tal como se conoce de otros lenguajes de programación de llamada-por- referencia:
void mira( int porValor, int &porReferencia ) { porValor = 42; porReferencia = 42; } void mar( ) { int ix, jx; ix = jx = 1; mira( ix, jx ); // ix == 1, jx == 42 }
2.11. PLANTILLAS DE FUNCION
Las plantillas de función permiten la creación de funciones que ejecuten las mismas operaciones sobre distintos tipos de datos, pero la plantilla de función se define sólo una vez.
Las plantillas de función proporcionan, como las macros, una solución compacta, pero permiten verificación completa de tipo.
Todas las definiciones de plantillas de función empiezan con la palabra reservada template ( ver apdo.4.8, pág. 31 ), seguida por una lista de parámetros formales a la plantilla de función encerrados en corchetes angulares ( < > ). Cada parámetro formal es precedido por la palabra reservada class. A continuación se coloca la definición de función y se define como cualquier otra función.
La función con el mismo nombre que la clase, pero precedido por un carácter tilde ( ∼ ) se llama el destructor de dicha clase.
Cuando una función miembro se define por fuera de la definición de clase, el nombre de función es antecedido por el nombre de la clase y por el operador de resolución de alcance binario ( :: ). Dicha función miembro queda dentro del alcance de la clase.
Ejemplo:
void Punto :: setX (const int val) // Definimos el método setX // ámbito de la clase Punto. { _x = val; } void Punto :: setY (const int val) { _y = val; }
El objeto apunto puede usar estos métodos para establecer y para obtener información sobre sí mismo:
Punto apunto; apunto.setX(1); // Inicialización. apunto.setY(1); // // x es necesaria a partir de aquí, de modo que la definimos aquí y la // inicializamos con el valor de la coordenada _x de apunto. // int x = apunto.getX( );
3.2. ALCANCE DE CLASE Y ACCESO A MIEMBROS DE CLASE
Los nombres de variables y los de función declarados en una definición de clase, y los nombres de datos y funciones miembro de una clase, pertenecen al alcance de dicha clase.
Dentro del alcance de clase, los miembros de clase son accesibles por todas las funciones miembro de dicha clase y pueden ser referenciados sólo por su nombre. Fuera del alcance de una clase, los miembros de clase se referencian, ya sea a través del nombre del objeto, una referencia a un objeto, o un apuntador a un objeto.
3.3. COMO CONTROLAR EL ACCESO A MIEMBROS
Se puede tener acceso a los miembros de clase privado sólo por miembros (y amigos) de dicha clase. Se puede tener acceso a los miembros públicos de una clase mediante cualquier función del programa.
El cliente de una clase puede ser una función miembro de otra clase, o puede ser una función global.
Los miembros de clase públicos presentan una vista de los servicios que proporciona la clase.
Para miembros de una clase, el acceso por omisión es privado.
El acceso a los datos privados de una clase puede ser controlado con cuidado mediante el uso de las funciones miembro conocidas como funciones de acceso. Si una clase desea permitir que los clientes lean datos privados, la clase puede proporcionar una función '' get ''. Para permitir que los clientes modifiquen datos privados, la clase puede proveer una función '' set''.
Ejemplo:
#include
// Constructor Cfecha::Cfecha( int dd, int mm, int aa ) { set_fecha( dd, mm, aa ); } // Obtener una fecha void Cfecha::get_fecha( int &dd, int &mm, int &aa ) { dd = dia, mm = mes, aa = anyo; }
// Continuamos con el ejemplo: Punto (const int x, const int y) { _x = x; // Para poder inicializar un punto en _y = y; // otras coordenadas que no sean (0,0). } void setX (const int val); void setY (const int val); int getX() { return _x;} int getY() { return _y;} };
Los constructores son llamados implícitamente cuando definimos objetos de sus clases:
Punto apunto; // Punto :: Punto() Punto bpunto(12,34); // Punto :: Punto(const int, const int)
3.5. DESTRUCTORES
Un destructor de clase es llamado automáticamente cuando un objeto de una clase se sale de alcance: debemos asegurarnos de que la memoria asignada sea liberada.
Este método especial llamado destructor es llamado una vez por cada objeto en el momento de su destrucción.
Un destructor no recibe parámetros ni regresa ningún valor. Una clase sólo puede tener un destructor: la homonimia de destructores no está permitida.
La destrucción de los objetos tiene lugar cuando el objeto abandona su ámbito de definición o es explícitamente destruido. Esto último sucede cuando nosotros dinámicamente asignamos un objeto y lo liberamos cuando ya no nos es necesario.
Los destructores se declaran con el nombre de la clase prefijado con una tilde ( ∼ ):
class Punto { int _x, _y; public: Punto() { _x = _y = 0; }
// Continuamos con el ejemplo: Punto (const int x, const int y) { _x = xval; y = yval; } Punto (const Punto &desde) { x = desde. _x; _y = desde._y; } ∼ Punto() { /* ¡Nada que hacer! */} void setX(const int val); void setY(const int val); int getX() {return _x;} int getY() {return _y;} };
3.6. CUANDO SON LLAMADOS LOS DESTRUCTORES Y CONSTRUCTORES
Por lo regular, son llamados de forma automática. En general, las llamadas de destructor se efectúan en orden inverso a las llamadas de constructor.
3.7. ASIGNACIÓN POR OMISION EN COPIA A NIVEL DE MIEMBRO
El operador de asignación ( = ) es utilizado para asignar un objeto a otro objeto del mismo tipo.
4.2. COMPOSICION: CLASES COMO MIEMBROS DE OTRAS CLASES
Una clase puede tener otras clases como miembros.
Cuando un objeto entra en alcance, su constructor es llamado automáticamente, por lo que es preciso especificar cómo se pasan argumentos a constructores de objetos miembro. Se construyen los objetos miembro antes de que los objetos de clase que los incluyen sean construidos.
4.3. FUNCIONES AMIGO Y CLASES AMIGO
Podemos definir que funciones o clases sean amigos de una clase para permitirles acceso directo a sus miembros de datos privados. Se puede declarar una función o toda una clase como un friend de otra clase.
Para declarar una función como un friend de una clase, en la definición de clase hay que preceder el prototipo de función con la palabra reservada friend.
Las declaraciones de amistad pueden ser colocadas en cualquier parte de la definición de clase.
Es posible especificar funciones homónimas como amigos de una clase. Cada función homónima que se desea como un amigo, debe ser declarada en forma explícita en la definición de clase como amigo de la clase.
Ejemplo:
class Complejo { ... public: ... friend Complejo operator + ( const Complejo &, const Complejo & ); } Complejo operator +(const Complejo &op1, const Complejo &op2) { double real = op1._real + op2._real, imag = op1._imag + op2._imag;
return ( Complejo (real, imag)); }
No se deben usar amigos muy seguido debido a que rompen con el principio de aislamiento de datos en sus fundamentos. Si los usamos de forma muy seguida, es señal de que tenemos que modificar nuestra gráfica de herencia.
4.4. COMO UTILIZAR UN APUNTADOR THIS
Cada objeto mantiene un apuntador a sí mismo llamado apuntador this que es un argumento implícito en todas las referencias a miembros incluidos dentro de dicho objeto. El apuntador this puede también ser utilizado de forma explícita. Mediante el uso de la palabra reservada this , cada objeto puede determinar su propia dirección.
El apuntador this es utilizado de manera implícita para referenciar tanto los miembros de datos como las funciones miembro de un objeto. El tipo de este apuntador this depende del tipo del objeto y de si es declarada const la función miembro en la cual this es utilizado.
Un uso del apuntador this es impedir que un objeto sea asignado a sí mismo.
Ejemplo:
// Declaramos un objeto fecha1 y a continuación le enviamos el // mensaje set_fecha.
fecha1.set_fecha( );
// C++ define el puntero this para apuntar al objeto fecha1 de la // forma:
Cfecha *const this = &fecha1;
// La función set_fecha puede ser definida también de la siguiente // forma:
void Cfecha::set_fecha( ) { cout << ''día, ## : ''; cin >> this->dia; cout << ''mes, ## : ''; cin >> this->mes; cout << ''año, #### : ''; cin >> this->anyo; }