SlideShare una empresa de Scribd logo
1 de 60
Valeria Berrones Vélez
Jesús Salvador Barrera Aguilar
¿Qué es C++?
C++ es un lenguaje de programación, creado a mediados de 1980 por Bjarne
Strousstrup, como extensión del lenguaje C. Este lenguaje abarca tres paradigmas
de la programación:
1. Programación Estructurada
2. Programación Genérica
3. Programación Orientada a Objetos
C++
• En la actualidad, C++ es un lenguaje versátil, potente y general. Su éxito entre los
• programadores le ha llevado a ocupar el primer puesto como herramienta de
desarrollo de
• aplicaciones, ya sea en Windows o GNU Linux, que es el sistema operativo en el
cual basaremos este tutorial.
C++ en un entorno Linux
Comenzaremos diciendo que los programas se pueden escribir en cualquier editor
de textos
de GNU, entre ellos se encuentran emacs, vim, kate, gedit, nan, guardando dichos
archivos
con extensión .cpp, los cuales serán compilados en GNU/linux utilizando el
compilador GNU
de C++, llamado gcc que puede compilar C, C++, y que además se apega al estándar
ANSI,
permitiendo la portabilidad de estos códigos. Dicho compilador se invoca con el
comando gcc.
Estructura de un programa
en C++
Para darnos una idea chequemos el siguiente programa
//Mi primer programa en C++
# include <iostream>
using namespace std;
int main (){
count << "hello World";
return 0;
}
C++
• El programa anterior es típico de los programadores aprendices, el resultado de
su impresión
• en pantalla es la frase:
• ”hello Word”
• Es uno de los más simples programas que pueden estar escritos en C + +, pero ya
contiene
• los componentes fundamentales que todos los programas escritos en C + +.
Vamos a ver
• línea por línea en el código lo que hemos escrito:
Variables Y Tipos De Datos
Una variable es un espacio de memoria reservado en el
ordenador para contener valores que pueden cambiar
durante la ejecución de un programa. Los tipos que se le
asignen a estas determinan cómo se manipulará la
información contenida en ellas. Cada variable necesita un
identificador que la distingue de las demás. Un identificador
válido es una secuencia de una o más letras, dígitos o
guiones bajos, recordando que no deben coincidir con
palabras reservadas del lenguaje, deben comenzar por una
letra y además tomar en cuenta que C++ hace diferencia
entre mayúsculas y minúsculas.
• Las variables que se pueden presentar en un programa son de los
siguientes tipos:
• 1. Variables Locales . Se definen solo en bloque en el que se vayan a
ocupar, de esta manera evitamos tener variables definidas que
luego no se utilizan.
• 2. Variables Globales. No son lo más recomendable, pues su
existencia atenta contra la comprensión del código y su
encapsulamiento.
• 3. Variables estáticas. Se tienen que inicializar en el momento en
que se declaran, de manera obligatoria.
• Ahora hablemos de los tipos de datos que reconoce C++. Estos definen el
modo en que se usa el espacio (memoria) en los programas. Al especificar
un tipo de datos, estamos indicando al compilador como crear un espacio
de almacenamiento en particular, y también como manipular este espacio.
Un tipo de dato define el posible rango de valores que una variable puede
tomar al momento de ejecución del programa y a lo largo de toda la vida
útil del propio programa.
• Los tipos de datos pueden ser predefinidos o abstractos. Un tipo de dato
predefinido es intrínsecamente comprendido por el compilador. En
contraste, un tipo de datos definido por el usuario es aquel que usted o
cualquier otro programador crea como una clase, que comúnmente son
llamados tipos de datos abstractos.
Los tipos de datos más comunes
en C++ son:
Tipo De Dato Espacio en
Memoria
Rango
unsigned char 8 bits 0 a 255
char 8 bits -128 a 127
short int 16 bits -32,768 a 32,767
unsigned int 32 bits 0 a 4,294,967,295
int 32 bits -2,147,483,648 a
2,147,483,647
unsigned long 32 bits 0 a 4,294,967,295
enum 16 bits -2,147,483,648 a
2,147,483,647
long 32 bits -2,147,483,648 a
2,147,483,647
¿Pero que es el lenguaje C?
• C es un lenguaje de propósito general, procedimental e imperativo desarrollado
en 1972 por Dennis Ritchie en Bell Labs para el sistema operativo Unix.
• Acceso de bajo nivel a la memoria
• Construcciones de lenguaje cerca de las instrucciones de la máquina
• Se usa como un "ensamblador independiente de la máquina"
• Una "C mejor" (http://www.research.att.com/~bs/C++.html)
• que admite:
• Programación de sistemas
• Programación orientada a objetos (clases y herencia)
• Programación en el tamaño grande (espacios de nombres, excepciones)
• Programación genérica (plantillas)
• Reutilización (bibliotecas de clases y plantillas grandes)
C VS C++
• La mayoría de los programas C también son programas C ++.
• Sin embargo, los buenos programas de C ++ generalmente no se parecen a C:
• evitar macros (usar en línea)
• evitar punteros (usar referencias)
• evite malloc y free (use new y delete)
• evitar arreglos y char * (usar vectores y cadenas) ...
• evitar estructuras (usar clases)
C VS C++
• C ++ fomenta un estilo diferente de programación:
• evitar la programación de procedimientos
• modele su dominio con clases y plantillas
Objetivos de diseño C ++
•"C con clases", diseñado por Bjarne
Stroustrup a principios de los 80:
•Originalmente un traductor a C
•Inicialmente difícil de depurar e ineficiente
•Mayoría de la extensión compatible hacia
arriba de C
• "Tan cerca de C como sea posible, pero no más cerca"
• Una comprobación de tipo más fuerte
• Soporte para programación orientada a objetos
• Eficiencia en tiempo de ejecución
• Primitivas del lenguaje cerca de las instrucciones de la máquina
• Costo mínimo para nuevas características
Diseño de memoria
• int i;
• int * iPtr; // un puntero a un entero
• iPtr = & i; // iPtr contiene la dirección de I
• * iPtr = 100;
Referencias vs Punteros
• Las referencias deben preferirse a los punteros, excepto cuando:
• manipular objetos dinámicamente asignados
• nuevo devuelve un puntero de objeto
• una variable debe abarcar un conjunto de objetos
• usa un puntero para caminar por el set
C++ CLASSES
• Las clases de C ++ se pueden crear de forma automática (en la pila):
• o dinámicamente (en el montón)
Hello World "en C ++
• Puede compilar todo junto a mano: c++ helloWorld.cpp -o helloWorld
• O puede usar un Makefile para administrar dependencias: helloWorld :
helloWorld.cpp
• c++ $@.cpp -o $@
• O podría usar cdt con eclipse para crear un proyecto estándar de make gestionado
TIPOS Y FUNCIONES DE C++(MENU INGLES)
Forma canónica ortodoxa
• La mayoría de tus clases deberían verse así:
¿Por qué OCF?
• Si no define estas cuatro funciones miembro, C ++ las generará:
• Constructor predeterminado
• llamará al constructor predeterminado para cada miembro de datos
• incinerador de basuras
• llamará al destructor de cada miembro de datos
• copia constructor
• copiará poco a poco cada miembro de datos
• los punteros se copiarán, ¡no los objetos apuntados!
• asignación
• copiará poco a poco cada miembro de datos
Ejemplo: una clase de cadena
•Nos gustaría una clase String que proteja las
cadenas estilo C:
•las cadenas son indistinguibles de los
punteros de char
•las actualizaciones de cadena pueden dañar
la memoria
• Las cadenas deben apoyar:
• creación y destrucción
• inicialización de matrices de caracteres
• proceso de copiar
• indexación segura
• concatenación segura y actualización
• salida
• longitud y otras operaciones comunes ...
Comandos de C++
Constructores predeterminados
• Cada constructor debe establecer la clase invariante:
• El constructor predeterminado para una clase se invoca cuando se declara una
nueva instancia sin ningún parámetro de inicialización:
Destructores
• El destructor de cadenas debe liberar explícitamente cualquier memoria asignada
por ese objeto.
•¡Cada nuevo debe coincidir en alguna
parte con una eliminación!
•usar nuevo y eliminar objetos
•use new [] y delete [] para arreglos!
Copiar constructores
• Nuestro constructor de copia String debe crear una copia profunda:
Algunas observaciones ...
• Debemos definir un constructor de copia, ... ¡si no las copias de Strings
compartirán la misma representación!
• ¡Modificar uno modificará el otro!
• ¡Destruir uno invalidará al otro!
•Debemos declarar copy como const, ...
sino no podremos construir una copia de
una cadena const!
•Solo las operaciones const (inmutables)
están permitidas en los valores de const
•Debemos declarar la copia como String &,
not String,? ... sino se hará una nueva copia
antes de pasarla al constructor.
•Los argumentos de funciones siempre pasan
por valor en C ++
•¡El "valor" de un puntero es un puntero!
Otros constructores
• Los constructores de clases pueden tener argumentos arbitrarios, siempre que
sus firmas sean únicas y no ambiguas:
•Como el argumento no se modifica,
podemos declararlo como const.
Esto nos permitirá construir
instancias String a partir de matrices
char constantes.
Operadores de Asignación
• La asignación es diferente del constructor de copia porque ya existe una
instancia:
•Return String& rather than void so the result
can be used in an expression
•Return String& rather than String so the
result won’t be copied!
•this is a pseudo-variable whose value is a
pointer to the current object
•so *this is the value of the current object,
which is returned by reference
Conversión implícita
• Cuando un argumento del tipo "incorrecto" se pasa a una función, el compilador
de C ++ busca un constructor que lo convierta al tipo "correcto":
• se convierte implícitamente en:
Sobrecarga del operador (indexación)
• No solo la asignación, sino que otros operadores útiles pueden "sobrecargarse"
siempre que sus firmas sean únicas:
Operadores sobrecargados
• Los siguientes operadores pueden estar sobrecargados:
Amigos
• Nos gustaría poder escribir:
• Pero:
• No puede ser una función miembro de ostream, ya que no podemos extender la
biblioteca estándar.
• No puede ser una función miembro de String ya que el objetivo es cout.
• Pero debe tener acceso a los datos privados de String
•So ... we need a binary function << that takes
a cout and a String as arguments, and is a
friend of String.
Amigos ...
• Declaramos:
• Y define:
Mapa vial
• C++ vs C
• C++ vs Java
• References vs pointers
• C++ classes: Orthodox Canonical Form
• A quick look at STL — The Standard Template Library
Biblioteca de plantillas estándar
• STL es una biblioteca C ++ de propósito general de algoritmos genéricos y estructuras de datos.
• Los contenedores almacenan colecciones de objetos
• vector, list, deque, set, multiset, map, multimap
• Iteradores atraviesan contenedores
• acceso aleatorio, bidireccional, hacia adelante / hacia atrás ...
• Los objetos de función encapsulan funciones como objetos
• aritmética, comparación, lógica y definida por el usuario ...
• Algoritmos implementan procedimientos genéricos
• buscar, contar, copiar, random_shuffle, ordenar, ...
• Los adaptadores proporcionan una interfaz alternativa a un componente
• stack, queue, reverse_iterator
Un inversor de línea STL
• #include <iostream>
• #include <stack> // STL stacks
• #include <string> // Standard
strings
• void rev(void)
• {
• typedef stack<string> IOStack; // instantiate the template
• IOStack ioStack; // instantiate the template class
• string buf;
• while (getline(cin, buf)) {
• ioStack.push(buf);
• }
• IOStack ioStack; //
instantiate the template class
• string buf;
• while (getline(cin, buf)) {
• ioStack.push(buf);
• }
•
• while (ioStack.size() != 0) {
• cout << ioStack.top() << endl;
• ioStack.pop();
• }
• }
¡Lo que deberías saber!
• ¿Qué nuevas características agrega C ++ a C?
• ¿Qué elimina Java de C ++?
• ¿Cómo debería usar los estilos de comentarios C y C ++?
• ¿Cómo se diferencia una referencia de un puntero?
• ¿Cuándo debería usar punteros en C ++?
• ¿Dónde viven los objetos C ++ en la memoria?
• ¿Qué es una lista de inicialización de miembros?
• ¿Por qué C ++ necesita destructores?
• ¿Qué es OCF y por qué es importante?
• ¿Cuál es la diferencia entre eliminar y eliminar []?
• ¿Qué es la sobrecarga del operador?
¿Puedes responder estas preguntas?
• ¿Por qué C ++ no admite la recolección de basura?
• ¿Por qué Java no es compatible con herencia múltiple?
• ¿Qué problema puedes tener con las referencias?
• ¿Por qué C ++ no hace copias profundas por defecto?
• ¿Cómo se puede declarar una clase sin un constructor predeterminado?
• ¿Por qué los objetos de la misma clase pueden acceder a miembros privados de
los demás?
• MyClass& start() { // returns a reference
• MyClass a("a"); // automatic
• MyClass *b = new MyClass("b"); // dynamic
• return *b; //
returns a reference (!) to b
• }
// a goes out of scope
• void finish(MyClass& b) {
• delete &b;
// need pointer to b
• }
• include "MyClass.h”using namespace std;int main (int argc, char **argv) {
MyClass aClass("d");
• finish(start()); return 0;
• }

Más contenido relacionado

La actualidad más candente

La actualidad más candente (17)

Taller de c sharp
Taller de c sharpTaller de c sharp
Taller de c sharp
 
C sharp
C sharpC sharp
C sharp
 
Introduccion del Lenguaje C
Introduccion del Lenguaje CIntroduccion del Lenguaje C
Introduccion del Lenguaje C
 
01 - Introducción al lenguaje de programación Python 3
01 - Introducción al lenguaje de programación Python 301 - Introducción al lenguaje de programación Python 3
01 - Introducción al lenguaje de programación Python 3
 
Lenguaje c++
Lenguaje c++Lenguaje c++
Lenguaje c++
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
 
Tipos de datos_para_c_
Tipos de datos_para_c_Tipos de datos_para_c_
Tipos de datos_para_c_
 
Clase 01 290615
Clase 01 290615Clase 01 290615
Clase 01 290615
 
Clase 03
Clase 03Clase 03
Clase 03
 
Moviles
MovilesMoviles
Moviles
 
Clase 01
Clase 01Clase 01
Clase 01
 
Introduccion al lenguaje de programacion c
Introduccion al lenguaje de programacion cIntroduccion al lenguaje de programacion c
Introduccion al lenguaje de programacion c
 
Lenguaje de programacion en c
Lenguaje de programacion en cLenguaje de programacion en c
Lenguaje de programacion en c
 
Lenguaje c 1
Lenguaje c   1Lenguaje c   1
Lenguaje c 1
 
C++ Meetup Madrid
C++ Meetup MadridC++ Meetup Madrid
C++ Meetup Madrid
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Practica 1
Practica 1Practica 1
Practica 1
 

Similar a Tutorial C++

Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Nilson Payares
 

Similar a Tutorial C++ (20)

P-S2.pptx
P-S2.pptxP-S2.pptx
P-S2.pptx
 
Presentacion1
Presentacion1Presentacion1
Presentacion1
 
Estructura basica para_c_++
Estructura basica para_c_++Estructura basica para_c_++
Estructura basica para_c_++
 
Estructura basica para_c_(2)
Estructura basica para_c_(2)Estructura basica para_c_(2)
Estructura basica para_c_(2)
 
Instrucciones Basicas para C++
Instrucciones Basicas para C++Instrucciones Basicas para C++
Instrucciones Basicas para C++
 
Lenguaje C (pdf)
Lenguaje C (pdf)Lenguaje C (pdf)
Lenguaje C (pdf)
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Tipos de datos_para_c_
Tipos de datos_para_c_Tipos de datos_para_c_
Tipos de datos_para_c_
 
Presentación de Tipos de datos para c++ de programacion
Presentación de Tipos de datos para c++ de programacionPresentación de Tipos de datos para c++ de programacion
Presentación de Tipos de datos para c++ de programacion
 
Estructuras básicas para C++
Estructuras básicas para C++Estructuras básicas para C++
Estructuras básicas para C++
 
Programación de nivel básico 1. c1.
Programación de nivel básico 1. c1.Programación de nivel básico 1. c1.
Programación de nivel básico 1. c1.
 
Manual c++01
Manual c++01Manual c++01
Manual c++01
 
Instrucciones básicas para C++
Instrucciones básicas para C++Instrucciones básicas para C++
Instrucciones básicas para C++
 
Actividades 1 7
Actividades 1 7Actividades 1 7
Actividades 1 7
 
Actividades 1 7
Actividades 1 7Actividades 1 7
Actividades 1 7
 
Fundamentos de Programacion - Unidad 3 Introduccion a la programacion
Fundamentos de Programacion - Unidad 3 Introduccion a la programacionFundamentos de Programacion - Unidad 3 Introduccion a la programacion
Fundamentos de Programacion - Unidad 3 Introduccion a la programacion
 
LENGUAJE C++
LENGUAJE C++LENGUAJE C++
LENGUAJE C++
 
Introducción al c#
Introducción al c#Introducción al c#
Introducción al c#
 
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C Sharp
 

Más de ValeriaBerrones

Más de ValeriaBerrones (16)

Examen de la segunda unidad de programación
Examen de la segunda unidad de programaciónExamen de la segunda unidad de programación
Examen de la segunda unidad de programación
 
CUESTIONARIO 5 PREGUNTAS DE LOS 6 TEMAS
CUESTIONARIO 5 PREGUNTAS  DE LOS 6 TEMASCUESTIONARIO 5 PREGUNTAS  DE LOS 6 TEMAS
CUESTIONARIO 5 PREGUNTAS DE LOS 6 TEMAS
 
Presentacion de Instrucciones basicas para_c++
Presentacion de Instrucciones basicas para_c++Presentacion de Instrucciones basicas para_c++
Presentacion de Instrucciones basicas para_c++
 
Presentacion de la Estructura basica para_c++
Presentacion de la Estructura basica para_c++Presentacion de la Estructura basica para_c++
Presentacion de la Estructura basica para_c++
 
Presentación de Tablas de verdad_para_c++
Presentación de Tablas de verdad_para_c++Presentación de Tablas de verdad_para_c++
Presentación de Tablas de verdad_para_c++
 
Ejercicios de Raptor en DFD
Ejercicios de Raptor en DFDEjercicios de Raptor en DFD
Ejercicios de Raptor en DFD
 
Fotos de Diagramas de Flujo A Color de Programación
Fotos de Diagramas de Flujo A Color de ProgramaciónFotos de Diagramas de Flujo A Color de Programación
Fotos de Diagramas de Flujo A Color de Programación
 
Ley de la_jerarquia_de_operaciones
Ley de la_jerarquia_de_operacionesLey de la_jerarquia_de_operaciones
Ley de la_jerarquia_de_operaciones
 
Code block
Code blockCode block
Code block
 
OPERACIONES BÁSICAS EN EXCEL
OPERACIONES BÁSICAS EN EXCELOPERACIONES BÁSICAS EN EXCEL
OPERACIONES BÁSICAS EN EXCEL
 
Promedios de Calificaciones
Promedios de Calificaciones Promedios de Calificaciones
Promedios de Calificaciones
 
Transportes Excel
Transportes ExcelTransportes Excel
Transportes Excel
 
Venta En Tres Meses
Venta En Tres MesesVenta En Tres Meses
Venta En Tres Meses
 
Gráfica de Ventas De Excel
Gráfica de Ventas De ExcelGráfica de Ventas De Excel
Gráfica de Ventas De Excel
 
Gráficos de Ventas en Excel
Gráficos de Ventas en ExcelGráficos de Ventas en Excel
Gráficos de Ventas en Excel
 
Formato base
Formato baseFormato base
Formato base
 

Último

Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Fernando Solis
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
UPTAIDELTACHIRA
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
El Fortí
 

Último (20)

LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 

Tutorial C++

  • 1. Valeria Berrones Vélez Jesús Salvador Barrera Aguilar
  • 2. ¿Qué es C++? C++ es un lenguaje de programación, creado a mediados de 1980 por Bjarne Strousstrup, como extensión del lenguaje C. Este lenguaje abarca tres paradigmas de la programación: 1. Programación Estructurada 2. Programación Genérica 3. Programación Orientada a Objetos
  • 3. C++ • En la actualidad, C++ es un lenguaje versátil, potente y general. Su éxito entre los • programadores le ha llevado a ocupar el primer puesto como herramienta de desarrollo de • aplicaciones, ya sea en Windows o GNU Linux, que es el sistema operativo en el cual basaremos este tutorial.
  • 4. C++ en un entorno Linux Comenzaremos diciendo que los programas se pueden escribir en cualquier editor de textos de GNU, entre ellos se encuentran emacs, vim, kate, gedit, nan, guardando dichos archivos con extensión .cpp, los cuales serán compilados en GNU/linux utilizando el compilador GNU de C++, llamado gcc que puede compilar C, C++, y que además se apega al estándar ANSI, permitiendo la portabilidad de estos códigos. Dicho compilador se invoca con el comando gcc.
  • 5. Estructura de un programa en C++ Para darnos una idea chequemos el siguiente programa //Mi primer programa en C++ # include <iostream> using namespace std; int main (){ count << "hello World"; return 0; }
  • 6. C++ • El programa anterior es típico de los programadores aprendices, el resultado de su impresión • en pantalla es la frase: • ”hello Word” • Es uno de los más simples programas que pueden estar escritos en C + +, pero ya contiene • los componentes fundamentales que todos los programas escritos en C + +. Vamos a ver • línea por línea en el código lo que hemos escrito:
  • 7. Variables Y Tipos De Datos Una variable es un espacio de memoria reservado en el ordenador para contener valores que pueden cambiar durante la ejecución de un programa. Los tipos que se le asignen a estas determinan cómo se manipulará la información contenida en ellas. Cada variable necesita un identificador que la distingue de las demás. Un identificador válido es una secuencia de una o más letras, dígitos o guiones bajos, recordando que no deben coincidir con palabras reservadas del lenguaje, deben comenzar por una letra y además tomar en cuenta que C++ hace diferencia entre mayúsculas y minúsculas.
  • 8. • Las variables que se pueden presentar en un programa son de los siguientes tipos: • 1. Variables Locales . Se definen solo en bloque en el que se vayan a ocupar, de esta manera evitamos tener variables definidas que luego no se utilizan. • 2. Variables Globales. No son lo más recomendable, pues su existencia atenta contra la comprensión del código y su encapsulamiento. • 3. Variables estáticas. Se tienen que inicializar en el momento en que se declaran, de manera obligatoria.
  • 9. • Ahora hablemos de los tipos de datos que reconoce C++. Estos definen el modo en que se usa el espacio (memoria) en los programas. Al especificar un tipo de datos, estamos indicando al compilador como crear un espacio de almacenamiento en particular, y también como manipular este espacio. Un tipo de dato define el posible rango de valores que una variable puede tomar al momento de ejecución del programa y a lo largo de toda la vida útil del propio programa. • Los tipos de datos pueden ser predefinidos o abstractos. Un tipo de dato predefinido es intrínsecamente comprendido por el compilador. En contraste, un tipo de datos definido por el usuario es aquel que usted o cualquier otro programador crea como una clase, que comúnmente son llamados tipos de datos abstractos.
  • 10. Los tipos de datos más comunes en C++ son: Tipo De Dato Espacio en Memoria Rango unsigned char 8 bits 0 a 255 char 8 bits -128 a 127 short int 16 bits -32,768 a 32,767 unsigned int 32 bits 0 a 4,294,967,295 int 32 bits -2,147,483,648 a 2,147,483,647 unsigned long 32 bits 0 a 4,294,967,295 enum 16 bits -2,147,483,648 a 2,147,483,647 long 32 bits -2,147,483,648 a 2,147,483,647
  • 11. ¿Pero que es el lenguaje C? • C es un lenguaje de propósito general, procedimental e imperativo desarrollado en 1972 por Dennis Ritchie en Bell Labs para el sistema operativo Unix. • Acceso de bajo nivel a la memoria • Construcciones de lenguaje cerca de las instrucciones de la máquina • Se usa como un "ensamblador independiente de la máquina"
  • 12. • Una "C mejor" (http://www.research.att.com/~bs/C++.html) • que admite: • Programación de sistemas • Programación orientada a objetos (clases y herencia) • Programación en el tamaño grande (espacios de nombres, excepciones) • Programación genérica (plantillas) • Reutilización (bibliotecas de clases y plantillas grandes)
  • 13. C VS C++ • La mayoría de los programas C también son programas C ++. • Sin embargo, los buenos programas de C ++ generalmente no se parecen a C: • evitar macros (usar en línea) • evitar punteros (usar referencias) • evite malloc y free (use new y delete) • evitar arreglos y char * (usar vectores y cadenas) ... • evitar estructuras (usar clases)
  • 14. C VS C++ • C ++ fomenta un estilo diferente de programación: • evitar la programación de procedimientos • modele su dominio con clases y plantillas
  • 15. Objetivos de diseño C ++ •"C con clases", diseñado por Bjarne Stroustrup a principios de los 80: •Originalmente un traductor a C •Inicialmente difícil de depurar e ineficiente •Mayoría de la extensión compatible hacia arriba de C
  • 16. • "Tan cerca de C como sea posible, pero no más cerca" • Una comprobación de tipo más fuerte • Soporte para programación orientada a objetos • Eficiencia en tiempo de ejecución • Primitivas del lenguaje cerca de las instrucciones de la máquina • Costo mínimo para nuevas características
  • 17. Diseño de memoria • int i; • int * iPtr; // un puntero a un entero • iPtr = & i; // iPtr contiene la dirección de I • * iPtr = 100;
  • 18. Referencias vs Punteros • Las referencias deben preferirse a los punteros, excepto cuando: • manipular objetos dinámicamente asignados • nuevo devuelve un puntero de objeto • una variable debe abarcar un conjunto de objetos • usa un puntero para caminar por el set
  • 19. C++ CLASSES • Las clases de C ++ se pueden crear de forma automática (en la pila): • o dinámicamente (en el montón)
  • 21. • Puede compilar todo junto a mano: c++ helloWorld.cpp -o helloWorld • O puede usar un Makefile para administrar dependencias: helloWorld : helloWorld.cpp • c++ $@.cpp -o $@ • O podría usar cdt con eclipse para crear un proyecto estándar de make gestionado
  • 22. TIPOS Y FUNCIONES DE C++(MENU INGLES)
  • 23. Forma canónica ortodoxa • La mayoría de tus clases deberían verse así:
  • 24. ¿Por qué OCF? • Si no define estas cuatro funciones miembro, C ++ las generará: • Constructor predeterminado • llamará al constructor predeterminado para cada miembro de datos • incinerador de basuras • llamará al destructor de cada miembro de datos • copia constructor • copiará poco a poco cada miembro de datos • los punteros se copiarán, ¡no los objetos apuntados! • asignación • copiará poco a poco cada miembro de datos
  • 25. Ejemplo: una clase de cadena •Nos gustaría una clase String que proteja las cadenas estilo C: •las cadenas son indistinguibles de los punteros de char •las actualizaciones de cadena pueden dañar la memoria
  • 26. • Las cadenas deben apoyar: • creación y destrucción • inicialización de matrices de caracteres • proceso de copiar • indexación segura • concatenación segura y actualización • salida • longitud y otras operaciones comunes ...
  • 28. Constructores predeterminados • Cada constructor debe establecer la clase invariante:
  • 29. • El constructor predeterminado para una clase se invoca cuando se declara una nueva instancia sin ningún parámetro de inicialización:
  • 30. Destructores • El destructor de cadenas debe liberar explícitamente cualquier memoria asignada por ese objeto.
  • 31. •¡Cada nuevo debe coincidir en alguna parte con una eliminación! •usar nuevo y eliminar objetos •use new [] y delete [] para arreglos!
  • 32. Copiar constructores • Nuestro constructor de copia String debe crear una copia profunda:
  • 33. Algunas observaciones ... • Debemos definir un constructor de copia, ... ¡si no las copias de Strings compartirán la misma representación! • ¡Modificar uno modificará el otro! • ¡Destruir uno invalidará al otro!
  • 34. •Debemos declarar copy como const, ... sino no podremos construir una copia de una cadena const! •Solo las operaciones const (inmutables) están permitidas en los valores de const
  • 35. •Debemos declarar la copia como String &, not String,? ... sino se hará una nueva copia antes de pasarla al constructor. •Los argumentos de funciones siempre pasan por valor en C ++ •¡El "valor" de un puntero es un puntero!
  • 36. Otros constructores • Los constructores de clases pueden tener argumentos arbitrarios, siempre que sus firmas sean únicas y no ambiguas:
  • 37. •Como el argumento no se modifica, podemos declararlo como const. Esto nos permitirá construir instancias String a partir de matrices char constantes.
  • 38. Operadores de Asignación • La asignación es diferente del constructor de copia porque ya existe una instancia:
  • 39. •Return String& rather than void so the result can be used in an expression •Return String& rather than String so the result won’t be copied! •this is a pseudo-variable whose value is a pointer to the current object •so *this is the value of the current object, which is returned by reference
  • 40. Conversión implícita • Cuando un argumento del tipo "incorrecto" se pasa a una función, el compilador de C ++ busca un constructor que lo convierta al tipo "correcto":
  • 41. • se convierte implícitamente en:
  • 42. Sobrecarga del operador (indexación) • No solo la asignación, sino que otros operadores útiles pueden "sobrecargarse" siempre que sus firmas sean únicas:
  • 43. Operadores sobrecargados • Los siguientes operadores pueden estar sobrecargados:
  • 44. Amigos • Nos gustaría poder escribir:
  • 45. • Pero: • No puede ser una función miembro de ostream, ya que no podemos extender la biblioteca estándar. • No puede ser una función miembro de String ya que el objetivo es cout. • Pero debe tener acceso a los datos privados de String
  • 46. •So ... we need a binary function << that takes a cout and a String as arguments, and is a friend of String.
  • 49. Mapa vial • C++ vs C • C++ vs Java • References vs pointers • C++ classes: Orthodox Canonical Form • A quick look at STL — The Standard Template Library
  • 50. Biblioteca de plantillas estándar • STL es una biblioteca C ++ de propósito general de algoritmos genéricos y estructuras de datos. • Los contenedores almacenan colecciones de objetos • vector, list, deque, set, multiset, map, multimap • Iteradores atraviesan contenedores • acceso aleatorio, bidireccional, hacia adelante / hacia atrás ... • Los objetos de función encapsulan funciones como objetos • aritmética, comparación, lógica y definida por el usuario ... • Algoritmos implementan procedimientos genéricos • buscar, contar, copiar, random_shuffle, ordenar, ... • Los adaptadores proporcionan una interfaz alternativa a un componente • stack, queue, reverse_iterator
  • 51. Un inversor de línea STL • #include <iostream> • #include <stack> // STL stacks • #include <string> // Standard strings • void rev(void) • { • typedef stack<string> IOStack; // instantiate the template • IOStack ioStack; // instantiate the template class • string buf; • while (getline(cin, buf)) { • ioStack.push(buf); • }
  • 52. • IOStack ioStack; // instantiate the template class • string buf; • while (getline(cin, buf)) { • ioStack.push(buf); • } •
  • 53. • while (ioStack.size() != 0) { • cout << ioStack.top() << endl; • ioStack.pop(); • } • }
  • 54. ¡Lo que deberías saber! • ¿Qué nuevas características agrega C ++ a C? • ¿Qué elimina Java de C ++? • ¿Cómo debería usar los estilos de comentarios C y C ++? • ¿Cómo se diferencia una referencia de un puntero?
  • 55. • ¿Cuándo debería usar punteros en C ++? • ¿Dónde viven los objetos C ++ en la memoria? • ¿Qué es una lista de inicialización de miembros? • ¿Por qué C ++ necesita destructores? • ¿Qué es OCF y por qué es importante? • ¿Cuál es la diferencia entre eliminar y eliminar []? • ¿Qué es la sobrecarga del operador?
  • 56. ¿Puedes responder estas preguntas? • ¿Por qué C ++ no admite la recolección de basura? • ¿Por qué Java no es compatible con herencia múltiple? • ¿Qué problema puedes tener con las referencias?
  • 57. • ¿Por qué C ++ no hace copias profundas por defecto? • ¿Cómo se puede declarar una clase sin un constructor predeterminado? • ¿Por qué los objetos de la misma clase pueden acceder a miembros privados de los demás?
  • 58.
  • 59. • MyClass& start() { // returns a reference • MyClass a("a"); // automatic • MyClass *b = new MyClass("b"); // dynamic • return *b; // returns a reference (!) to b • } // a goes out of scope • void finish(MyClass& b) { • delete &b; // need pointer to b • }
  • 60. • include "MyClass.h”using namespace std;int main (int argc, char **argv) { MyClass aClass("d"); • finish(start()); return 0; • }