Pensar en C++

El equipo de traducci�n de Pensar en C++

Historial de revisiones
Revisi�n 0.128-02-2004DV
Creaci�n de documento ra�z

Tabla de contenidos

1. Construir y usar objetos
El proceso de traducci�n del lenguaje
Int�rpretes
Compiladores
El proceso de compilaci�n
Herramientas para compilaci�n modular
Declaraciones vs definiciones
Enlazado
Uso de librer�as
Su primer programa en C++
Uso de las clases iostream
Espacios de nombres
Fundamentos de la estructura de un programa
Hello, World!
Ejecutar al compilador
M�s sobre iostream
Concatenar vectores de caracteres
Leer de la entrada
Llamar a otros programas
Introducir cadenas
Lectura y escritura de ficheros
Introducci�n a los vectores
Resumen
Ejercicios
2. El C en C++
Creaci�n de funciones
Funciones que retornan valores
Uso de funciones de librer�as C
Creaci�n de librer�as propias
Control de la ejecui�n
Verdadero y falso
if-else
while
do-while
for
Las sentencias break y continue
switch
Uso y maluso de goto
Recursividad
Introducci�n a los operadores
Precedencia
Auto incremento y decremento
Introducci�n a los tipos de datos
Tipos empotrados b�sicos
booleano, true y false
Especificadores
Introducci�n a los punteros
FIXME: Modifying the outside object
Introducci�n a las referencias de C++
Punteros y referencias como modificadores
Alcance
Definici�n de variables 'al vuelo'
Especificaci�n del almacenamiento
Variables globales
Variables locales
static
extern
Constantes
volatile
Los operadores y su uso
Asignaci�n
Operadores matem�ticos
Operadores relacionales
Operadores l�gicos
Operadores para bits
Operadores de desplazamiento
Operadores unarios
El operador ternario
El operador ternario
El operador ternario
El operador coma
Trampas habituales cuando se usan los operadores
Operadores del molde (casting)
Moldeado expl�cito en C++
sizeof - un operador en si mismo
La palabra reservada keyword
Operadores expl�citos
Creaci�n de tipos compuestos
Operadores expl�citos
Creaci�n de alias usando typedef
Combinaci�n de variables por medio de struct
Programas m�s claros gracias a enum
C�mo Ahorrar memoria con union
Arrays
FIXME: Debugging hints
Opciones para depuraci�n
Convertir variables y expresiones en cadenas
La macro C assert()
Direcciones de funci�n
Definici�n de un puntero a funci�n
Declaraciones y definiciones complicadas
Uso de un puntero a funci�n
Arrays de punteros a funciones
Make: c�mo hacer compilaci�n separada
Las actividades de Make
Los Makefiles de este libro
Un ejemplo de Makefile
Resumen
Ejercicios
3. Abstracci�n de Datos
Una librer�a peque�a al estilo de C
Almacenamiento din�mico
Suposiciones equivocadas
�Qu� est� mal?
El objeto b�sico
�Qu� es un objeto?
Tipado de datos abstracto
Detalles del objeto
Conveciones de los ficheros de cabecera
Importancia de los ficheros de cabecera
El problema de la declaraci�n m�ltiple
Las directivas del preprocesador #define, #ifndef y #endif
Un est�ndar para los ficheros de cabecera
Espacios de nombres en las cabeceras
Uso de las cabeceras en proyectos
Estructuras anidadas
Resoluci�n del alcance global
Resumen
Ejercicios
4. Ocultar la implementaci�n
Establecer los l�mites
Control de acceso en C++
protected
Friends
Amigas anidadas
�Es eso puro?
Capa de objetos
La clase
Modificaciones en Stash para usar control de acceso
Modificar Stack para usar control de acceso
Manejo de clases
Ocultar la implementaci�n
Reducir la recompilaci�n
Resumen
Ejercicios
5. Inicializaci�n y limpieza
Inicializaci�n garantizada por el constructor
Limpieza garantizada por el destructor
Eliminaci�n del bloque de definiciones
para bucles
Alojamiento de memoria
Stash con constructores y destructores
Stack con constructores y destructores
Inicializaci�n de tipos agregados
Constructores por defecto
Resumen
Ejercicios
6. Sobrecarga de funciones y argumentos por defecto
M�s decoraci�n de nombres
Sobrecarga en el valor de retorno
Enlace con tipos seguros
Ejemplo de sobrecarga
Uniones
Argumentos por defecto
Argumentos de relleno
Elecci�n entre sobrecarga y argumentos por defecto
Resumen
Ejercicios
7. Constantes
Sustituci�n de valores
const en archivos de cabecera
constantes seguras
Vectores
Diferencias con C
Punteros
Puntero a constante
Puntero constante
Asignaci�n y comprobaci�n de tipos
Argumentos de funciones y valores de retorno
Paso por valor constante
Retorno por valor constante
Paso y retorno de direcciones
Clases
const en las clases
Las constantes en tiempo de compilaci�n dentro de las clases.
Objetos y m�todos constantes
Volatile
Resumen
Ejercicios
8. Funciones inline
Los peligros del preprocesador
Macros y acceso
Funciones inline
inline dentro de clases
Funciones de acceso
Stash y Stack con inline
inline y el compilador
Limitaciones
Referencias adelantadas
Esconder actividades en contructores y destructores
Reducir el desorden
M�s caracter�sticas del preprocesador
Construcci�n de s�mbolos
Chequeo mejorado de errores
Resumen
Ejercicios
9. Control de nombres
Los elementos est�ticos de C
Variables est�ticas dentro de funciones
Control del enlazado
Otros especificadores para almacenamiento de clases
Espacios de nombres
Crear un espacio de nombres
C�mo usar un espacio de nombres
El uso de los espacios de nombres
Miembros est�ticos en C++
Definici�n del almacenamiento para miembros de datos est�ticos
Clases anidadas y locales
M�todos est�ticos
FIXME static initialization dependency
Qu� hacer
Especificaciones de enlazado alternativo
Resumen
Ejercicios
10. Referencias y el constructor de copia
Punteros en C++
Referencias en C++
Referencias en las funciones
Consejos para el paso de argumentos
El constructor de copia
Paso y retorno por valor
Construcci�n por copia
Constructor copia por defecto
Alternativas a la construcci�n por copia
Punteros a miembros
Funciones
Resumen
Ejercicios
11. Creaci�n din�mica de objetos
Creaci�n de objetos
Asignaci�n din�mica en C
Operador new
Operador delete
Un ejemplo sencillo
Trabajo extra para el gestor de memoria
Redise�o de los ejemplos anteriores
delete void* probablemente es un error
Responsabilidad de la limpieza cuando se usan punteros
Stash para punteros
new y delete para vectores
C�mo hacer que un puntero sea m�s parecido a un vector
Cuando se supera el espacio de almacenamiento
Sobrecarga de los operadores new y delete
Resumen
Ejercicios
12. Herencia y Composici�n
Sintaxis de la composici�n
Sintaxis de la herencia
Lista de inicializadores de un constructor
Inicializaci�n de objetos miembros de una clase
Tipos predefinidos en la lista de inicializadores
Combinaci�n de composici�n y herencia
Orden de llamada de constructores y destructores
Ocultaci�n de nombres
Funciones que no heredan autom�ticamente
Herencia y m�todos est�ticos
Composici�n vs. herencia
Protected
Herencia protegida
Operadores de sobrecarga y herencia
Herencia m�ltiple
Desarrollo incremental
FIXME Upcasting
�Por qu� FIXME "upcasting"?
FIXME Upcasting y el constructor de copia
Composici�n vs. herencia FIXME (revisited)
FIXME Upcasting de punteros y referencias
Una crisis
Resumen
Ejercicios
13. Polimorfismo y Funciones virtuales
Evoluci�n de los programadores de C++
Upcasting
El problema
Ligadura de las llamadas a funciones
Funciones virtuales
Extensibilidad
C�mo implementa C++ la ligadura din�mica
Almacenando informaci�n de tipo
Pintar funciones virtuales
Detr�s del tel�n
Instalar el vpointer
Los objetos son diferentes
�Por qu� funciones virtuales?
Clases base abstractas y funciones virtuales puras
Definiciones virtuales puras
Herencia y la VTABLE
FIXME: Object slicing
Sobrecargar y redefinir
Tipo de retorno variante
funciones virtuales y constructores
Orden de las llamadas a los constructores
Comportamiento de las funciones virtuales dentro de los constructores
Destructores y destructores virtuales
Destructores virtuales puros
Mecanismo virtual en los destructores
Creaci�n una jerarqu�a basada en objetos
Sobrecarga de operadores
Downcasting
Resumen
Ejercicios

Lista de ejemplos

13.1.
<xi:include></xi:include>