Post on 14-Aug-2015
Trabajo lenguaje de
programacion c++
Materia tecnicas de
programacion
Alumno Ricardo Axel Garcia
Gomez
C++ es un lenguaje imperativo orientado a objetos derivado del C [1] En realidad
un superconjunto de C que nacioacute para antildeadirle cualidades y caracteriacutesticas de las
que careciacutea El resultado es que como su ancestro sigue muy ligado al hardware
subyacente manteniendo una considerable potencia para programacioacuten a bajo
nivel pero se la han antildeadido elementos que le permiten tambieacuten un estilo de
programacioacuten con alto nivel de abstraccioacuten
Respecto a su antecesor se ha procurando mantener una exquisita compatibilidad
hacia atraacutes por dos razones poder reutilizar la enorme cantidad de
coacutedigo C existente y facilitar una transicioacuten lo maacutes fluida posible a los
programadores de Cclaacutesico de forma que pudieran pasar sus programas a C++ e
ir modificaacutendolos (hacieacutendolos maacutes ++) de forma gradual De hecho los primeros
compiladores C++ lo que haciacutean en realidad era traducir (preprocesar) a C y
compilar despueacutes (las consecuencias se dejan sentir todaviacutea en el lenguaje
Por lo general puede compilarse un programa C bajo C++ pero no a la inversa si el
programa utiliza alguna de las caracteriacutesticas especiales de C++ Algunas
situaciones requieren especial cuidado Por ejemplo si se declara una funcioacuten dos
veces con diferente tipo de argumentos el compilador C invoca un error de Nombre
duplicado mientras que en C++ quizaacutes sea interpretado como una sobrecarga de
la primera funcioacuten (que sea o no legal depende de otras circunstancias)
Como se ha sentildealado C++ no es un lenguaje orientado a objetos puro (en el sentido
en que puede serlo Java por ejemplo) ademaacutes no nacioacute como un ejercicio
acadeacutemico de disentildeo Se trata simplemente del sucesor de un lenguaje de
programacioacuten hecho por programadores (de alto nivel) para programadores lo que
se traduce en un disentildeo pragmaacutetico al que se le han ido antildeadiendo todos los
elementos que la praacutectica aconsejaba como necesarios con independencia de su
belleza o purismo conceptual (Perfection in some language theoretical sense is
not an aim of C++ Utility is ) Estos condicionantes tienen su cara y su cruz en
ocasiones son motivo de ciertos reproches por parte de sus detractores en otras
estas caracteriacutesticas son precisamente una cualidad De hecho en el disentildeo de
la Libreriacutea Estaacutendar C++ se ha usado ampliamente esta dualidad (ser mezcla de un
lenguaje tradicional con elementos de POO) lo que ha permitido un modelo muy
avanzado de programacioacuten extraordinariamente flexible
Aunque C++ introduce nuevas palabras clave y operadores para manejo de clases
algunas de sus extensiones tienen aplicacioacuten fuera del contexto de programacioacuten
con objetos (fuera del aacutembito de las clases) de hecho muchos aspectos
de C++ que pueden ser usados independientemente de las clases
Del C se ha dicho Por naturaleza el lenguaje C es permisivo e intenta hacer algo
razonable con lo que se haya escrito Aunque normalmente esto es una virtud
tambieacuten puede hacer que ciertos errores sean difiacuteciles de descubrir Respecto
alC++ podriacuteamos decir otro tanto pero hemos de reconocer que su sistema de
deteccioacuten de errores es mucho maacutes robusto que el de C por lo que algunos errores
de este seraacuten raacutepidamente detectados
Desde luego C++ es un lenguaje de programacioacuten extremadamente largo y
complejo cuando nos adentramos en eacutel parece no acabar nunca Justo cuando
aprendemos un significado descubrimos que una mano negra ha antildeadido otras dos
o tres acepciones para la misma palabra Tambieacuten descubrimos que praacutecticamente
no hay una regla sin su correspondiente excepcioacuten Cuando aprendemos que algo
no se puede hacer hay siempre alguacuten truco escondido para hacerlo y cuando nos
dicen que es un lenguaje fuertemente tipado (Strong type checking) resulta
completamente falso
A pesar de todo ha experimentado un extraordinario eacutexito desde su creacioacuten De
hecho muchos sistemas operativos compiladores e inteacuterpretes han sido escritos
en C++ (el propio Windows y Java) Una de las razones de su eacutexito es ser un
lenguaje de propoacutesito general que se adapta a muacuteltiples situaciones Para
comprobar el eacutexito e importancia de los desarrollos realizados en C++ puede darse
una vuelta por la paacutegina que mantiene el Dr Stroustrup al respecto
Tanto sus fervientes defensores como sus aceacuterrimos detractores han hecho correr
riacuteos de tinta ensalzando sus cualidades o subrayando sus miserias aunque todo el
mundo parece estar de acuerdo en que es largo y complejo Ha servido de
justificacioacuten para el disentildeo de otros lenguajes que intentan eliminar sus
inconvenientes al tiempo que mantener sus virtudes y una de sus uacuteltima
incorporaciones las plantillas ha sido origen de un nuevo paradigma de
programacioacuten (metaprogramacioacuten)
En mi opinioacuten cualquier lenguaje de propoacutesito general que como C++ permita tocar
ambos mundos la programacioacuten de bajo nivel y altos niveles de abstraccioacuten
resultaraacute siempre e inevitablemente complejo Ocurre lo mismo con los lenguajes
naturales que son tambieacuten extraordinariamente complejos (esto lo saben bien los
gramaacuteticos) Cualquier comunicacioacuten entre humanos presupone una ingente
cantidad de conocimientos y suposiciones previas entre los interlocutores A pesar
de lo cual la comunicacioacuten exacta y sin ambiguumledades entre dos personas no
resulta faacutecil
Lo mismo que en su ancestro en el disentildeo del C++ primoacute sobre todo la velocidad
de ejecucioacuten del coacutedigo Tanto uno como otro representan los ejecutables maacutes
raacutepidos que se pueden construir para una maacutequina y circunstancias
determinadas En este sentido la uacutenica alternativa de mejora es la codificacioacuten
manual el pulido de determinadas rutinas (o de todo el coacutedigo) en
ensamblador aunque evidentemente esto es impracticable para aplicaciones
medianamente grandes a no ser que se disponga de todos los recursos y tiempo
del mundo
Con todo a pesar de ser un lenguaje intriacutensecamente raacutepido y de que los
compiladores modernos son bastante inteligentes en este sentido (adoptan
automaacuteticamente las decisiones que resultan en el coacutedigo de ejecucioacuten maacutes
eficiente) es mucho lo que puede hacer el programador para favorecer esta rapidez
con solo adoptar algunas sencillas precauciones Estos son los consejos
Use enteros (int) con preferencia sobre cualquier otro tipo de variable
numeacuterica En especial en los contadores de bucles Las operaciones con
enteros son del orden de 10 a 20 veces maacutes raacutepidas que las de nuacutemeros en
coma flotante
Use operadores incremento y decremento ++--
Use variables de registro en especial en los bucles criacuteticos sobre todo si son
anidados
Use aritmeacutetica de punteros frente a subiacutendices de matrices
En problemas de computacioacuten numeacuterica recuerde que el caacutelculo de funciones
trascendentes es por lo general muy lento
Use referencias para argumentos y valores devueltos en funciones antes
que objetos por valor
C++ es un lenguaje imperativo orientado a objetos derivado del C [1] En realidad
un superconjunto de C que nacioacute para antildeadirle cualidades y caracteriacutesticas de las
que careciacutea El resultado es que como su ancestro sigue muy ligado al hardware
subyacente manteniendo una considerable potencia para programacioacuten a bajo
nivel pero se la han antildeadido elementos que le permiten tambieacuten un estilo de
programacioacuten con alto nivel de abstraccioacuten
Respecto a su antecesor se ha procurando mantener una exquisita compatibilidad
hacia atraacutes por dos razones poder reutilizar la enorme cantidad de
coacutedigo C existente y facilitar una transicioacuten lo maacutes fluida posible a los
programadores de Cclaacutesico de forma que pudieran pasar sus programas a C++ e
ir modificaacutendolos (hacieacutendolos maacutes ++) de forma gradual De hecho los primeros
compiladores C++ lo que haciacutean en realidad era traducir (preprocesar) a C y
compilar despueacutes (las consecuencias se dejan sentir todaviacutea en el lenguaje
Por lo general puede compilarse un programa C bajo C++ pero no a la inversa si el
programa utiliza alguna de las caracteriacutesticas especiales de C++ Algunas
situaciones requieren especial cuidado Por ejemplo si se declara una funcioacuten dos
veces con diferente tipo de argumentos el compilador C invoca un error de Nombre
duplicado mientras que en C++ quizaacutes sea interpretado como una sobrecarga de
la primera funcioacuten (que sea o no legal depende de otras circunstancias)
Como se ha sentildealado C++ no es un lenguaje orientado a objetos puro (en el sentido
en que puede serlo Java por ejemplo) ademaacutes no nacioacute como un ejercicio
acadeacutemico de disentildeo Se trata simplemente del sucesor de un lenguaje de
programacioacuten hecho por programadores (de alto nivel) para programadores lo que
se traduce en un disentildeo pragmaacutetico al que se le han ido antildeadiendo todos los
elementos que la praacutectica aconsejaba como necesarios con independencia de su
belleza o purismo conceptual (Perfection in some language theoretical sense is
not an aim of C++ Utility is ) Estos condicionantes tienen su cara y su cruz en
ocasiones son motivo de ciertos reproches por parte de sus detractores en otras
estas caracteriacutesticas son precisamente una cualidad De hecho en el disentildeo de
la Libreriacutea Estaacutendar C++ se ha usado ampliamente esta dualidad (ser mezcla de un
lenguaje tradicional con elementos de POO) lo que ha permitido un modelo muy
avanzado de programacioacuten extraordinariamente flexible
Aunque C++ introduce nuevas palabras clave y operadores para manejo de clases
algunas de sus extensiones tienen aplicacioacuten fuera del contexto de programacioacuten
con objetos (fuera del aacutembito de las clases) de hecho muchos aspectos
de C++ que pueden ser usados independientemente de las clases
Del C se ha dicho Por naturaleza el lenguaje C es permisivo e intenta hacer algo
razonable con lo que se haya escrito Aunque normalmente esto es una virtud
tambieacuten puede hacer que ciertos errores sean difiacuteciles de descubrir Respecto
alC++ podriacuteamos decir otro tanto pero hemos de reconocer que su sistema de
deteccioacuten de errores es mucho maacutes robusto que el de C por lo que algunos errores
de este seraacuten raacutepidamente detectados
Desde luego C++ es un lenguaje de programacioacuten extremadamente largo y
complejo cuando nos adentramos en eacutel parece no acabar nunca Justo cuando
aprendemos un significado descubrimos que una mano negra ha antildeadido otras dos
o tres acepciones para la misma palabra Tambieacuten descubrimos que praacutecticamente
no hay una regla sin su correspondiente excepcioacuten Cuando aprendemos que algo
no se puede hacer hay siempre alguacuten truco escondido para hacerlo y cuando nos
dicen que es un lenguaje fuertemente tipado (Strong type checking) resulta
completamente falso
A pesar de todo ha experimentado un extraordinario eacutexito desde su creacioacuten De
hecho muchos sistemas operativos compiladores e inteacuterpretes han sido escritos
en C++ (el propio Windows y Java) Una de las razones de su eacutexito es ser un
lenguaje de propoacutesito general que se adapta a muacuteltiples situaciones Para
comprobar el eacutexito e importancia de los desarrollos realizados en C++ puede darse
una vuelta por la paacutegina que mantiene el Dr Stroustrup al respecto
Tanto sus fervientes defensores como sus aceacuterrimos detractores han hecho correr
riacuteos de tinta ensalzando sus cualidades o subrayando sus miserias aunque todo el
mundo parece estar de acuerdo en que es largo y complejo Ha servido de
justificacioacuten para el disentildeo de otros lenguajes que intentan eliminar sus
inconvenientes al tiempo que mantener sus virtudes y una de sus uacuteltima
incorporaciones las plantillas ha sido origen de un nuevo paradigma de
programacioacuten (metaprogramacioacuten)
En mi opinioacuten cualquier lenguaje de propoacutesito general que como C++ permita tocar
ambos mundos la programacioacuten de bajo nivel y altos niveles de abstraccioacuten
resultaraacute siempre e inevitablemente complejo Ocurre lo mismo con los lenguajes
naturales que son tambieacuten extraordinariamente complejos (esto lo saben bien los
gramaacuteticos) Cualquier comunicacioacuten entre humanos presupone una ingente
cantidad de conocimientos y suposiciones previas entre los interlocutores A pesar
de lo cual la comunicacioacuten exacta y sin ambiguumledades entre dos personas no
resulta faacutecil
Lo mismo que en su ancestro en el disentildeo del C++ primoacute sobre todo la velocidad
de ejecucioacuten del coacutedigo Tanto uno como otro representan los ejecutables maacutes
raacutepidos que se pueden construir para una maacutequina y circunstancias
determinadas En este sentido la uacutenica alternativa de mejora es la codificacioacuten
manual el pulido de determinadas rutinas (o de todo el coacutedigo) en
ensamblador aunque evidentemente esto es impracticable para aplicaciones
medianamente grandes a no ser que se disponga de todos los recursos y tiempo
del mundo
Con todo a pesar de ser un lenguaje intriacutensecamente raacutepido y de que los
compiladores modernos son bastante inteligentes en este sentido (adoptan
automaacuteticamente las decisiones que resultan en el coacutedigo de ejecucioacuten maacutes
eficiente) es mucho lo que puede hacer el programador para favorecer esta rapidez
con solo adoptar algunas sencillas precauciones Estos son los consejos
Use enteros (int) con preferencia sobre cualquier otro tipo de variable
numeacuterica En especial en los contadores de bucles Las operaciones con
enteros son del orden de 10 a 20 veces maacutes raacutepidas que las de nuacutemeros en
coma flotante
Use operadores incremento y decremento ++--
Use variables de registro en especial en los bucles criacuteticos sobre todo si son
anidados
Use aritmeacutetica de punteros frente a subiacutendices de matrices
En problemas de computacioacuten numeacuterica recuerde que el caacutelculo de funciones
trascendentes es por lo general muy lento
Use referencias para argumentos y valores devueltos en funciones antes
que objetos por valor
la Libreriacutea Estaacutendar C++ se ha usado ampliamente esta dualidad (ser mezcla de un
lenguaje tradicional con elementos de POO) lo que ha permitido un modelo muy
avanzado de programacioacuten extraordinariamente flexible
Aunque C++ introduce nuevas palabras clave y operadores para manejo de clases
algunas de sus extensiones tienen aplicacioacuten fuera del contexto de programacioacuten
con objetos (fuera del aacutembito de las clases) de hecho muchos aspectos
de C++ que pueden ser usados independientemente de las clases
Del C se ha dicho Por naturaleza el lenguaje C es permisivo e intenta hacer algo
razonable con lo que se haya escrito Aunque normalmente esto es una virtud
tambieacuten puede hacer que ciertos errores sean difiacuteciles de descubrir Respecto
alC++ podriacuteamos decir otro tanto pero hemos de reconocer que su sistema de
deteccioacuten de errores es mucho maacutes robusto que el de C por lo que algunos errores
de este seraacuten raacutepidamente detectados
Desde luego C++ es un lenguaje de programacioacuten extremadamente largo y
complejo cuando nos adentramos en eacutel parece no acabar nunca Justo cuando
aprendemos un significado descubrimos que una mano negra ha antildeadido otras dos
o tres acepciones para la misma palabra Tambieacuten descubrimos que praacutecticamente
no hay una regla sin su correspondiente excepcioacuten Cuando aprendemos que algo
no se puede hacer hay siempre alguacuten truco escondido para hacerlo y cuando nos
dicen que es un lenguaje fuertemente tipado (Strong type checking) resulta
completamente falso
A pesar de todo ha experimentado un extraordinario eacutexito desde su creacioacuten De
hecho muchos sistemas operativos compiladores e inteacuterpretes han sido escritos
en C++ (el propio Windows y Java) Una de las razones de su eacutexito es ser un
lenguaje de propoacutesito general que se adapta a muacuteltiples situaciones Para
comprobar el eacutexito e importancia de los desarrollos realizados en C++ puede darse
una vuelta por la paacutegina que mantiene el Dr Stroustrup al respecto
Tanto sus fervientes defensores como sus aceacuterrimos detractores han hecho correr
riacuteos de tinta ensalzando sus cualidades o subrayando sus miserias aunque todo el
mundo parece estar de acuerdo en que es largo y complejo Ha servido de
justificacioacuten para el disentildeo de otros lenguajes que intentan eliminar sus
inconvenientes al tiempo que mantener sus virtudes y una de sus uacuteltima
incorporaciones las plantillas ha sido origen de un nuevo paradigma de
programacioacuten (metaprogramacioacuten)
En mi opinioacuten cualquier lenguaje de propoacutesito general que como C++ permita tocar
ambos mundos la programacioacuten de bajo nivel y altos niveles de abstraccioacuten
resultaraacute siempre e inevitablemente complejo Ocurre lo mismo con los lenguajes
naturales que son tambieacuten extraordinariamente complejos (esto lo saben bien los
gramaacuteticos) Cualquier comunicacioacuten entre humanos presupone una ingente
cantidad de conocimientos y suposiciones previas entre los interlocutores A pesar
de lo cual la comunicacioacuten exacta y sin ambiguumledades entre dos personas no
resulta faacutecil
Lo mismo que en su ancestro en el disentildeo del C++ primoacute sobre todo la velocidad
de ejecucioacuten del coacutedigo Tanto uno como otro representan los ejecutables maacutes
raacutepidos que se pueden construir para una maacutequina y circunstancias
determinadas En este sentido la uacutenica alternativa de mejora es la codificacioacuten
manual el pulido de determinadas rutinas (o de todo el coacutedigo) en
ensamblador aunque evidentemente esto es impracticable para aplicaciones
medianamente grandes a no ser que se disponga de todos los recursos y tiempo
del mundo
Con todo a pesar de ser un lenguaje intriacutensecamente raacutepido y de que los
compiladores modernos son bastante inteligentes en este sentido (adoptan
automaacuteticamente las decisiones que resultan en el coacutedigo de ejecucioacuten maacutes
eficiente) es mucho lo que puede hacer el programador para favorecer esta rapidez
con solo adoptar algunas sencillas precauciones Estos son los consejos
Use enteros (int) con preferencia sobre cualquier otro tipo de variable
numeacuterica En especial en los contadores de bucles Las operaciones con
enteros son del orden de 10 a 20 veces maacutes raacutepidas que las de nuacutemeros en
coma flotante
Use operadores incremento y decremento ++--
Use variables de registro en especial en los bucles criacuteticos sobre todo si son
anidados
Use aritmeacutetica de punteros frente a subiacutendices de matrices
En problemas de computacioacuten numeacuterica recuerde que el caacutelculo de funciones
trascendentes es por lo general muy lento
Use referencias para argumentos y valores devueltos en funciones antes
que objetos por valor
Tanto sus fervientes defensores como sus aceacuterrimos detractores han hecho correr
riacuteos de tinta ensalzando sus cualidades o subrayando sus miserias aunque todo el
mundo parece estar de acuerdo en que es largo y complejo Ha servido de
justificacioacuten para el disentildeo de otros lenguajes que intentan eliminar sus
inconvenientes al tiempo que mantener sus virtudes y una de sus uacuteltima
incorporaciones las plantillas ha sido origen de un nuevo paradigma de
programacioacuten (metaprogramacioacuten)
En mi opinioacuten cualquier lenguaje de propoacutesito general que como C++ permita tocar
ambos mundos la programacioacuten de bajo nivel y altos niveles de abstraccioacuten
resultaraacute siempre e inevitablemente complejo Ocurre lo mismo con los lenguajes
naturales que son tambieacuten extraordinariamente complejos (esto lo saben bien los
gramaacuteticos) Cualquier comunicacioacuten entre humanos presupone una ingente
cantidad de conocimientos y suposiciones previas entre los interlocutores A pesar
de lo cual la comunicacioacuten exacta y sin ambiguumledades entre dos personas no
resulta faacutecil
Lo mismo que en su ancestro en el disentildeo del C++ primoacute sobre todo la velocidad
de ejecucioacuten del coacutedigo Tanto uno como otro representan los ejecutables maacutes
raacutepidos que se pueden construir para una maacutequina y circunstancias
determinadas En este sentido la uacutenica alternativa de mejora es la codificacioacuten
manual el pulido de determinadas rutinas (o de todo el coacutedigo) en
ensamblador aunque evidentemente esto es impracticable para aplicaciones
medianamente grandes a no ser que se disponga de todos los recursos y tiempo
del mundo
Con todo a pesar de ser un lenguaje intriacutensecamente raacutepido y de que los
compiladores modernos son bastante inteligentes en este sentido (adoptan
automaacuteticamente las decisiones que resultan en el coacutedigo de ejecucioacuten maacutes
eficiente) es mucho lo que puede hacer el programador para favorecer esta rapidez
con solo adoptar algunas sencillas precauciones Estos son los consejos
Use enteros (int) con preferencia sobre cualquier otro tipo de variable
numeacuterica En especial en los contadores de bucles Las operaciones con
enteros son del orden de 10 a 20 veces maacutes raacutepidas que las de nuacutemeros en
coma flotante
Use operadores incremento y decremento ++--
Use variables de registro en especial en los bucles criacuteticos sobre todo si son
anidados
Use aritmeacutetica de punteros frente a subiacutendices de matrices
En problemas de computacioacuten numeacuterica recuerde que el caacutelculo de funciones
trascendentes es por lo general muy lento
Use referencias para argumentos y valores devueltos en funciones antes
que objetos por valor
Use enteros (int) con preferencia sobre cualquier otro tipo de variable
numeacuterica En especial en los contadores de bucles Las operaciones con
enteros son del orden de 10 a 20 veces maacutes raacutepidas que las de nuacutemeros en
coma flotante
Use operadores incremento y decremento ++--
Use variables de registro en especial en los bucles criacuteticos sobre todo si son
anidados
Use aritmeacutetica de punteros frente a subiacutendices de matrices
En problemas de computacioacuten numeacuterica recuerde que el caacutelculo de funciones
trascendentes es por lo general muy lento
Use referencias para argumentos y valores devueltos en funciones antes
que objetos por valor