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 de c++

Estructura basica para_c_++
Estructura basica para_c_++Estructura basica para_c_++
Estructura basica para_c_++heidiromero11
 
Estructura basica para_c_(2)
Estructura basica para_c_(2)Estructura basica para_c_(2)
Estructura basica para_c_(2)LuisCetis109
 
Instrucciones Basicas para C++
Instrucciones Basicas para C++Instrucciones Basicas para C++
Instrucciones Basicas para C++Dj109
 
Tipos de datos_para_c_
Tipos de datos_para_c_Tipos de datos_para_c_
Tipos de datos_para_c_Jesus22barrera
 
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 programacionValeriaBerrones
 
Estructuras básicas para C++
Estructuras básicas para C++Estructuras básicas para C++
Estructuras básicas para C++Bryangio2002
 
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.DENIRAMIREZANDRADE
 
Instrucciones básicas para C++
Instrucciones básicas para C++Instrucciones básicas para C++
Instrucciones básicas para C++Bryangio2002
 
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 programacionJosé Antonio Sandoval Acosta
 
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_1Nilson Payares
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C SharpEdgardo Martinez
 

Similar a tutorial de 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
Lenguaje cLenguaje c
Lenguaje c
 
Lenguaje C (pdf)
Lenguaje C (pdf)Lenguaje C (pdf)
Lenguaje C (pdf)
 
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 Jesus22barrera

Más de Jesus22barrera (20)

Jesus maria-fernanda
Jesus  maria-fernandaJesus  maria-fernanda
Jesus maria-fernanda
 
Ultima hora (1)
Ultima hora (1)Ultima hora (1)
Ultima hora (1)
 
Alice22
Alice22Alice22
Alice22
 
Alice 1
Alice 1Alice 1
Alice 1
 
CUESTIONARIO SEGUNDA UNIDAD
CUESTIONARIO SEGUNDA UNIDADCUESTIONARIO SEGUNDA UNIDAD
CUESTIONARIO SEGUNDA UNIDAD
 
Orta lugo rene_manuel
Orta lugo rene_manuelOrta lugo rene_manuel
Orta lugo rene_manuel
 
Diagramas
DiagramasDiagramas
Diagramas
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Instrucciones basicas para_c_
Instrucciones basicas para_c_Instrucciones basicas para_c_
Instrucciones basicas para_c_
 
Ley jerarquia de_las_operaciones
Ley jerarquia de_las_operacionesLey jerarquia de_las_operaciones
Ley jerarquia de_las_operaciones
 
tutorial visual C++
tutorial visual C++tutorial visual C++
tutorial visual C++
 
Instrucciones basicas para_c_
Instrucciones basicas para_c_Instrucciones basicas para_c_
Instrucciones basicas para_c_
 
Estructura basica para_c_
Estructura basica para_c_Estructura basica para_c_
Estructura basica para_c_
 
Tablas de verdad_para_c_
Tablas de verdad_para_c_Tablas de verdad_para_c_
Tablas de verdad_para_c_
 
Ley de la_jerarquia_de_operaciones
Ley de la_jerarquia_de_operacionesLey de la_jerarquia_de_operaciones
Ley de la_jerarquia_de_operaciones
 
tutorial de code blocks
tutorial de code blockstutorial de code blocks
tutorial de code blocks
 
Diapositivas salvavidas
Diapositivas salvavidasDiapositivas salvavidas
Diapositivas salvavidas
 
Evidencias fotos
Evidencias fotosEvidencias fotos
Evidencias fotos
 
Raptor word
Raptor wordRaptor word
Raptor word
 
Diagramas y pseudocodigos
Diagramas y pseudocodigosDiagramas y pseudocodigos
Diagramas y pseudocodigos
 

Último

Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleJonathanCovena1
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.DaluiMonasterio
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscaeliseo91
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFlor Idalia Espinoza Ortega
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinavergarakarina022
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Herramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfHerramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfMARIAPAULAMAHECHAMOR
 
6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docxCeciliaGuerreroGonza1
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 

Último (20)

Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo Sostenible
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
La Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdfLa Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdf
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fisca
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamica
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karina
 
Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 
Herramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfHerramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdf
 
6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 

tutorial de 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; • }