Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Lenguaje C paso a paso, Monografías, Ensayos de Programación C

Lenguaje C paso a paso y ejemplos

Tipo: Monografías, Ensayos

2019/2020

Subido el 12/03/2023

davidjmb3
davidjmb3 🇻🇪

3 documentos

1 / 44

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
C++ paso a paso
Sergio Luján Mora
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c

Vista previa parcial del texto

¡Descarga Lenguaje C paso a paso y más Monografías, Ensayos en PDF de Programación C solo en Docsity!

C++ paso a paso

Sergio Luján Mora

iv Índice resumido

E. Código de las clases 229

Bibliografía recomendada 249

Índice alfabético 253

Índice general

Índice resumido iii

Índice general v

Índice de cuadros xi

Índice de cuadros

Índice de figuras

    1. Introducción Índice de figuras xiii
    • 1.1. Introducción
    • 1.2. Ventajas de C++
    • 1.3. Objetivos de este libro
    • 1.4. Contenido de los capítulos
    • 1.5. Sistema operativo y compilador
    • 1.6. Convenciones tipográficas
    1. Clases y objetos
    • 2.1. Introducción
    • 2.2. Declaración de una clase
    • 2.3. Acceso a los miembros de una clase
    • 2.4. Control de acceso
    • 2.5. Visualización de un objeto
    • 2.6. Empleo de punteros
    • 2.7. Separación de la interfaz y la implementación
    • 2.8. La herramienta make
    • 2.9. Ficheros de encabezado
    • 2.10. Uso de espacios de nombres
    • 2.11. Ejercicios de autoevaluación
    • 2.12. Ejercicios de programación
      • 2.12.1. Clase TVector
      • 2.12.2. Clase TCalendario
    • 2.13. Respuesta a los ejercicios de autoevaluación vi Índice general
    • 2.14. Respuesta a los ejercicios de programación
      • 2.14.1. Clase TVector
      • 2.14.2. Clase TCalendario
    1. Constructor y destructor
    • 3.1. Sobrecarga de funciones
    • 3.2. Constructor
    • 3.3. Constructor por defecto
    • 3.4. Otros constructores
    • 3.5. Constructor de copia
    • 3.6. ¿Un constructor en la parte privada?
    • 3.7. Destructor
    • 3.8. Forma canónica de una clase
    • 3.9. Ejercicios de autoevaluación
    • 3.10. Ejercicios de programación
      • 3.10.1. Clase TCoordenada
      • 3.10.2. Clase TVector
      • 3.10.3. Clase TCalendario
    • 3.11. Respuesta a los ejercicios de autoevaluación
    • 3.12. Respuesta a los ejercicios de programación
      • 3.12.1. Clase TVector
      • 3.12.2. Clase TCalendario
    1. Funciones y clases amigas y reserva de memoria
    • 4.1. Introducción
    • 4.2. Declaración de amistad
    • 4.3. Guardas de inclusión
    • 4.4. Administración de memoria dinámica
    • 4.5. Administración de memoria dinámica y arrays de objetos
    • 4.6. Compilación condicional
    • 4.7. Directivas #warning y #error
    • 4.8. Ejercicios de autoevaluación
    • 4.9. Ejercicios de programación
      • 4.9.1. Clase TVector
      • 4.9.2. Clase TCalendario
    • 4.10. Respuesta a los ejercicios de autoevaluación
    • 4.11. Respuesta a los ejercicios de programación
      • 4.11.1. Clase TVector
      • 4.11.2. Clase TCalendario
    1. Sobrecarga de operadores Índice general vii
    • 5.1. Introducción
    • 5.2. Puntero this
    • 5.3. Modificador const
    • 5.4. Paso por referencia
    • 5.5. Sobrecarga de operadores
    • 5.6. Restricciones al sobrecargar un operador
    • 5.7. ¿Función miembro o función no miembro?
    • 5.8. Consejos
    • 5.9. Operador asignación
    • 5.10. Constructor de copia y operador asignación
    • 5.11. Operadores aritméticos
    • 5.12. Operadores de incremento y decremento
    • 5.13. Operadores abreviados
    • 5.14. Operadores de comparación
    • 5.15. Operadores de entrada y salida
    • 5.16. Operador corchete
    • 5.17. Ejercicios de autoevaluación
    • 5.18. Ejercicios de programación
      • 5.18.1. Clase TCoordenada
      • 5.18.2. Clase TLinea
      • 5.18.3. Clase TVector
      • 5.18.4. Clase TCalendario
    • 5.19. Respuesta a los ejercicios de autoevaluación
    • 5.20. Respuesta a los ejercicios de programación
      • 5.20.1. Clase TCoordenada
      • 5.20.2. Clase TLinea
      • 5.20.3. Clase TVector
      • 5.20.4. Clase TCalendario
    1. Composición y herencia
    • 6.1. Introducción
    • 6.2. Composición
    • 6.3. Inicialización de los objetos miembro
    • 6.4. Herencia
    • 6.5. Ejercicios de autoevaluación
    • 6.6. Ejercicios de programación
      • 6.6.1. Clase TLinea
      • 6.6.2. Clase TCoordenadaV
      • 6.6.3. Clase TAgenda
    • 6.7. Respuesta a los ejercicios de autoevaluación
    1. Otros temas viii Índice general
    • 7.1. Forma canónica de una clase
    • 7.2. Funciones de cero parámetros
    • 7.3. Valores por omisión de una función
    • 7.4. Funciones inline
    1. Errores más comunes
    • 8.1. Introducción
    • 8.2. Sobre el fichero makefile y la compilación
    • 8.3. Sobre las directivas de inclusión
    • 8.4. Sobre las clases
    • 8.5. Sobre la sobrecarga de los operadores
    • 8.6. Sobre la memoria
    • 8.7. Sobre las cadenas
    • 8.8. Varios
    1. Ejercicios
    • 9.1. Mentiras arriesgadas
    • 9.2. La historia interminable
    • 9.3. Pegado a ti
    • 9.4. Clase TComplejo
  • A. Palabras clave
    • A.1. Lista de palabras clave
  • B. Operadores
    • B.1. Lista de operadores
  • C. Sentencias
    • C.1. Introducción
      • C.1.1. Asignación
      • C.1.2. Sentencia compuesta (bloque de código)
      • C.1.3. Sentencia condicional
      • C.1.4. Sentencia condicional múltiple
      • C.1.5. Sentencia de selección
      • C.1.6. Bucle con contador
      • C.1.7. Bucle con condición inicial
      • C.1.8. Bucle con condición final
  • D. Herramientas
    • D.1. Editor JOE
      • D.1.1. Comandos básicos
      • D.1.2. Bloques de texto
      • D.1.3. Movimiento Índice general ix
      • D.1.4. Ayuda
    • D.2. Editor vim
      • D.2.1. Salir de vim
      • D.2.2. Introducción de nuevo texto
      • D.2.3. Movimientos del cursor
      • D.2.4. Posicionamiento del cursor sobre palabras
      • D.2.5. Deshacer
      • D.2.6. Adiciones, cambios y supresiones simples de texto
      • D.2.7. Búsquedas
      • D.2.8. Opciones del editor
    • D.3. Depurador gdb
      • D.3.1. Ejemplo de depuración
    • D.4. Depurador Valgrind
      • D.4.1. Memcheck
    • D.5. Compresor/descompresor tar
  • E. Código de las clases
    • E.1. La clase TCoordenada
    • E.2. La clase TLinea
    • E.3. La clase TVector
    • E.4. La clase TCalendario
  • Bibliografía recomendada
  • Índice alfabético
  • 2.1. Especificadores de acceso
  • B.1. Nivel de precedencia
  • B.2. Nivel de precedencia
  • B.3. Nivel de precedencia
  • B.4. Nivel de precedencia
  • B.5. Nivel de precedencia
  • B.6. Nivel de precedencia
  • B.7. Nivel de precedencia
  • B.8. Nivel de precedencia
  • B.9. Nivel de precedencia
  • B.10.Nivel de precedencia
  • B.11.Nivel de precedencia
  • B.12.Nivel de precedencia
  • B.13.Nivel de precedencia
  • B.14.Nivel de precedencia
  • B.15.Nivel de precedencia
  • B.16.Nivel de precedencia
  • 3.1. Situación de error por no proporcionar un constructor de copia adecuado
  • 4.1. Inclusión de la misma definición de clase dos veces
  • D.1. Página web del editor JOE
  • D.2. JOE: ficha de ayuda
  • D.3. JOE: ficha de ayuda
  • D.4. JOE: ficha de ayuda
  • D.5. JOE: ficha de ayuda
  • D.6. JOE: ficha de ayuda
  • D.7. JOE: ficha de ayuda
  • D.8. Página web del editor vim
  • D.9. Principales opciones del editor vim
  • D.10.Página web de gdb
  • D.11.Ejemplo de sesión de depuración con gdb
  • D.12.Página web de Valgrind

2 Capítulo 1. Introducción

programación Simula, aunque también tomó ideas de otros lenguajes importantes de la época como ALGOL68 o ADA. Durante los siguientes años, Stroustrup continuó el desarrollo del nuevo lenguaje y en 1983 se acuñó el término C++. En 1985, Bjarne Stroustrup publicó la primera versión de “The C++ Programming Language” (Addison-Wesley, 1985), que a partir de entonces se convirtió en el libro de referencia del lenguaje. En la actualidad, este lenguaje se encuentra estandarizado a nivel internacional con el estándar ISO/IEC 14882:1998 con el título “Information Technology - Programming Languages - C++”, publicado el 1 de septiembre de 1998. En el año 2003 se publicó una versión corregida del estándar (ISO/IEC 14882:2003). Finalmente, en la actualidad se está preparando una nueva versión del lenguaje, llamada “C++0X”, que se espera que esté preparada para el año 2010.

1.2. Ventajas de C++

Las principales ventajas que presenta el lenguaje C++ son:

Difusión: al ser uno de los lenguajes más empleados en la actualidad, posee un gran número de usuarios y existe una gran cantidad de libros, cursos, páginas web, etc. dedicados a él.

Versatilidad: C++ es un lenguaje de propósito general, por lo que se puede emplear para resolver cualquier tipo de problema.

Portabilidad: el lenguaje está estandarizado y un mismo código fuente se puede compilar en diversas plataformas.

Eficiencia: C++ es uno de los lenguajes más rápidos en cuanto ejecución.

Herramientas: existe una gran cantidad de compiladores, depuradores, librerías, etc.

1.3. Objetivos de este libro

Este libro no es, ni mucho menos, una referencia del lenguaje C++. Tampoco es un libro sobre programación orientada a objetos. Entonces, ¿qué es? El objetivo de este libro es proporcionar un material de aprendizaje breve y sencillo, donde se presenten los conceptos básicos del lenguaje C++ relacionados con la orientación a objetos conforme se vayan necesitando y paso por paso. Siguiendo el principio de Pareto de que “el 20 % de algo es el responsable del 80 % del resultado”, en este libro sólo se explica una pequeña parte de C++, pero que se puede considerar que es la más importante.

1.4. Contenido de los capítulos 3

El libro está estructurado como soporte de un curso de 10 horas de duración de introducción al lenguaje C++. Los capítulos principales, del 2 al 6, constituyen las 5 sesiones del curso, con una duración de 2 horas por sesión. Todas las explicaciones van acompañadas de ejemplos, seguidos de ejecuciones que muestran la entrada/salida del ejemplo para afianzar los conceptos. Es aconsejable que el lector lea este libro delante del ordenador, pruebe los ejemplos y los modifique para comprender mejor su funcio- namiento. Además, al final de cada capítulo se proponen ejercicios de autoevaluación y de programación, todos ellos con sus correspondientes soluciones. En este libro, suponemos que los lectores (alumnos del curso) poseen unos cono- cimientos mínimos sobre programación en general. Además, también suponemos que los alumnos conocen la sintaxis básica de C, C++, Java o JavaScript, por lo que este libro no explica las sentencias básicas del lenguaje (sentencias condicionales, bucles, etc.) o los diferentes tipos de datos que se pueden emplear (entero, carácter, etc.). De todos modos, en los apéndices del libro se incluyen las palabras clave, los operadores y las sentencias del lenguaje C++. La principal aportación de este libro, frente a otros libros similares, es que en este libro hemos querido reflejar los problemas a los que se enfrenta un lector cuando aprende un lenguaje de programación nuevo. La mayoría de los libros suponen que el lector no va a cometer errores, por lo que no hacen ninguna referencia a los posibles problemas de compilación del código o de comprensión de los conceptos explicados. Sin embargo, en este libro hemos optado por incluir algunos ejemplos con errores para mostrar los mensajes que genera el compilador. Además, en algunos apartados hemos dejado planteadas preguntas para que el lector pruebe y descubra la respuesta por sí mismo. Por último, este libro posee un capítulo dedicado en su totalidad a los errores más comunes que se cometen al programar con C++. Este capítulo, que es toda una novedad frente a otros libros similares, se puede emplear de dos formas: como material de aprendizaje o como referencia para buscar la solución frente a un error que se resiste a nuestros intentos por solucionarlo.

1.4. Contenido de los capítulos

Este libro se compone de 9 capítulos y 5 apéndices, además de varios índices (cua- dros, figuras, etc.) que facilitan la búsqueda de información y la bibliografía recomen- dada. El el Capítulo 2 (Clases y objetos) se introducen los conceptos de clase y obje- to, los elementos principales de la programación orientada a objetos. Se explica cómo declarar una clase y cómo crear objetos a partir de ella. Además, se explica la separa- ción de la interfaz y la implementación, lo que posibilita estructurar el código en va- rios ficheros para permitir la compilación separada. Por último, se comentan algunos aspectos relacionados con los ficheros de encabezado y los espacios de nombres.

1.5. Sistema operativo y compilador 5

TFecha. Finalmente, este libro termina con la (Bibliografía recomendada), donde se incluye una serie de libros sobre el lenguaje C++. Además, también se incluyen al- gunos enlaces a páginas de Internet donde se puede encontrar más información sobre el lenguaje C++ o sobre herramientas de programación.

1.5. Sistema operativo y compilador

Todo el código que se muestra en este libro ha sido compilado en Linux con el compilador g++ de GNU versión 3.3.2. Los mensajes de error que se recogen en este documento han sido generados por dicho compilador y pueden variar entre distintas versiones y, evidentemente, entre distintos compiladores. Los ejemplos de código están basados en C++ estándar, por lo que se pueden compilar sin problemas con otros compiladores que cumplan el estándar.

1.6. Convenciones tipográficas

Con el fin de mejorar la legibilidad del texto, distintas convenciones tipográficas se han empleado a lo largo de todo el libro. Los ejemplos, que normalmente están completos y por tanto se pueden escribir y probar, aparecen destacados y numerados dentro de una caja de la siguiente forma (el texto de los ejemplos emplea un tipo de letra de paso fijo como Courier):

Ejemplo 1. 1 #include 2 3 using namespace std; 4 5 int 6 main(void) 7 { 8 int i; 9 TCoordenada p1; 10 11 return 0; 12 }

Los números de línea permiten hacer referencia a una línea concreta del código. Los ejemplos parciales, que por sí solos no se pueden compilar y que normalmen- te complementan o corrigen un ejemplo completo que ha aparecido anteriormente, también aparecen destacados y numerados de la siguiente forma:

6 Capítulo 1. Introducción

1 class NombreClase { 2 // Contenido de la clase 3 };

También se ha empleado la notación anterior para indicar las ordenes que se pueden ejecutar desde la línea de comandos del sistema operativo. Por ejemplo:

1 g++ -o ejem1 ejem1.cc

La salida que genera un código de ejemplo o un programa como el compilador cuando un código presenta errores, se muestra destacada con el siguiente formato:

Salida ejemplo 1. 1 ejem1.cc: In function ‘int main()’: 2 ejem1.cc:9: ‘TCoordenada’ undeclared (first use this function) 3 ejem1.cc:9: (Each undeclared identifier is reported only once for 4 each function it appears in.) 5 ejem1.cc:9: syntax error before ‘;’ token

El título de la salida hace referencia al ejemplo que lo produce. Por último, los estilos empleados a lo largo del texto son:

Los nombres de los programas se muestran con un tipo de letra sin palo (sans serif). Ejemplo: Linux, g++, gdb, etc.

Las palabras no escritas en español aparecen destacadas en cursiva. Ejemplo: layering, link, etc.

Las extensiones de los ficheros, las palabras clave de los lenguajes de programa- ción y el código incluido dentro del texto se muestra con un tipo de letra de paso fijo como Courier. Ejemplo: .cc, g++, int a = 10;, etc.

Los términos importantes, cuando aparecen por primera, se destacan con un tipo de letra sin palo (sans serif) y en negrita. Ejemplo: clase, ocultación de información, operador de resolución de alcance, etc.