programas programar programacion libro lenguaje ejemplos como comandos avanzado c++ c

programar - lenguaje c++ ejemplos



¿Es cierto que no hay necesidad de aprender C porque C++ contiene todo? (11)

Es cierto que para la mayoría de los propósitos, C ++ contiene todo lo que C hace. Los abogados de idiomas rápidamente señalarán que hay algunos casos extremos muy especiales que son válidos C pero no son válidos en C ++.

Un ejemplo de esto podría ser la declaración C

int virtual;

que declara un entero llamado "virtual". Dado que "virtual" es una palabra clave en C ++, esto no es válido en C ++.

Estoy tomando una clase de programación en C ++ y el profesor nos dijo que no hay necesidad de aprender C porque C ++ contiene todo en C más las características orientadas a objetos. Sin embargo, algunos otros me han dicho que esto no es necesariamente cierto. ¿Alguien puede arrojar algo de luz sobre esto?


Hay un núcleo común grande de C (especialmente C89) y C ++, pero ciertamente hay áreas de diferencia entre C y C ++. Obviamente, C ++ tiene todas las características orientadas a objetos, además de la programación genérica, más excepciones, más espacios de nombres que C no. Sin embargo, también hay características de C que no están en C ++, como el soporte para la notación no prototipo (cercana a la arcaica) para declarar y definir funciones. En particular, el significado de la siguiente declaración de función es diferente en C y C ++:

extern void function();

En C ++, esa es una función que no devuelve ningún valor y no toma ningún parámetro (y, por lo tanto, se llama únicamente por sus efectos secundarios, sean lo que sean). En C, esa es una función que no devuelve ningún valor pero para la cual no hay información sobre la lista de argumentos. C todavía no requiere una declaración en el alcance antes de llamar a una función (en general, debe tener una declaración en el alcance si la función toma una lista de argumentos variable, por lo que es fundamental #include <stdio.h> antes de usar printf() , etc.)

También hay diferencias:

sizeof(''c'')

En C ++, la respuesta es 1; en C, la respuesta es normalmente 4 (sistemas de 32 bits con caracteres de 8 bits) o incluso 8 (sistemas de 64 bits con int de 64 bits).

En general, puede escribir código que compilará bajo compiladores C y C ++ sin mucha dificultad, la mayor parte de mi código lo hace todo el tiempo. Las excepciones son el resultado de descuido de mi parte, o porque exploté conscientemente las buenas características de C99 que no están en C ++ 98, como los inicializadores designados, o de long long .



Puede ser cierto que no necesita aprender la sintaxis de C si conoce la sintaxis de C ++, pero definitivamente necesita aprender cómo las prácticas de codificación son diferentes en C que en C ++.

Entonces tu profesor no era 100% correcto.
En C no tienes las clases para organizar tu código en módulos lógicos y no tienes polimorfismo C ++. Sin embargo, todavía necesita alcanzar estos objetivos de alguna manera.
aunque la sintaxis de C es hasta cierto punto un subconjunto de C ++, la programación en C no es un subconjunto de programación en C ++. es completamente diferente.


Si y no.

Como otros ya han respondido, el lenguaje C ++ es un superconjunto del lenguaje C, con algunas pequeñas excepciones, por ejemplo, que sizeof (''x'') da un valor diferente.

Pero lo que no creo que se haya establecido con mucha claridad es que cuando se trata del uso de estos dos lenguajes, C ++ no es un superconjunto, sino algo diferente. C ++ contiene nuevas formas (puede discutirse si son mejores) de hacer las cosas básicas, como escribir en la pantalla. Las viejas formas de C todavía están allí, pero por lo general usas las nuevas formas. Esto significa que un simple programa "hello world" se ve diferente en C y en C ++. Por lo tanto, no es realmente cierto que las cosas simples son las mismas en C y C ++, y luego simplemente agrega cosas más avanzadas, como soporte para programación orientada a objetos, en C ++.

Entonces, si ha aprendido C ++, tendrá que volver a aprender mucho antes de poder programar en C. (Bueno, es posible enseñar C ++ como una extensión de C, aún usando printf y malloc en lugar de iostreams y nuevo, y luego agregar clases y otras cosas de C ++, pero esa forma de usar C ++ generalmente está mal vista).


Yo personalmente no estaría de acuerdo con tu profesor.

En términos generales, C ++ se basa en C y en ese "sentido" lo contiene y lo extiende.

Sin embargo, dado que tradicionalmente las personas aprendieron C y solo entonces las extensiones de C ++, la declaración de su profesor es incorrecta ya que para usar C ++ correctamente necesitaría dominar los orígenes de C. Es posible que cuando le enseñe algo, su profesor o libro de texto no mencione específicamente qué vino de qué idioma.

Además, es importante entender que a pesar de las similitudes, no todos los programas C se ejecutan de la misma manera bajo C ++. Por ejemplo, las estructuras C se interpretan de manera diferente (como clases con todo lo público) por el compilador C ++.

Cuando enseño, primero enseño el núcleo C y luego voy a C ++.


No del todo cierto.

El mayor "gotcha" es tipar: C ++ es mucho más tipado que C, y los métodos preferidos para resolver esto en C ++ simplemente no están disponibles en C. A saber, puedes lanzar silenciosamente entre los tipos en C (particularmente los tipos de puntero) , pero no en C ++. Y C ++ recomienda encarecidamente utilizar los métodos static_cast / reinterpret_cast / const_cast para resolver estos problemas.

Más importante aún, si aprende la sintaxis y los gestos de C ++, probablemente le resulte difícil lidiar con C (algunos pueden decir que esto es bueno, y yo prefiero C ++, pero a veces simplemente no es una opción, o tiene que tratar con el código heredado que está en C y no en C ++). Nuevamente, los problemas más probables que encontrará son los punteros (particularmente el uso de char * y el conjunto general, en C ++ usando std :: string y std :: vector u otras colecciones es simplemente mejor ).

Ciertamente es posible aprender C ++, y luego aprender las diferencias entre C y C ++ y ser capaz de programar en ambos. Pero las diferencias son mucho más que superficiales.


Visión de conjunto:

Es casi cierto que C ++ es un superconjunto de C, y su profesor tiene razón en que no es necesario aprender C por separado.

C ++ agrega todo el aspecto orientado a objetos, aspecto de programación genérica, además de tener reglas menos estrictas (como las variables que deben declararse en la parte superior de cada función). C ++ cambia la definición de algunos términos en C, como las estructuras, aunque todavía en forma de superconjunto.

Ejemplos de por qué no es un superconjunto estricto:

Este artículo de Wikipedia tiene un par de buenos ejemplos de tales diferencias:

Una diferencia común es que C permite la conversión implícita de void * a otros tipos de puntero, pero C ++ no lo hace. Entonces, el siguiente es un código C válido:

int *i = malloc(sizeof(int) * 5);

... pero para hacerlo funcionar tanto en C como en C ++ uno necesitaría usar un molde explícito:

int *i = (int *) malloc(sizeof(int) * 5)

Otro problema común de portabilidad es que C ++ define muchas palabras clave nuevas, como nuevas y de clase, que pueden usarse como identificadores (por ejemplo, nombres de variables) en un programa C.

Este artículo de Wikipedia también tiene otras diferencias:

Los compiladores de C ++ impiden que goto cruce una inicialización, como en el siguiente código C99:

void fn(void) { goto flack; int i = 1; flack: ; }

¿Qué deberías aprender primero?

Primero debe aprender C ++, no porque aprender primero le hará daño, no porque tendrá que desaprender nada (no lo hará), sino porque no hay ningún beneficio en aprender C primero. Eventualmente aprenderá casi todo sobre C de todos modos porque está más o menos contenido en C ++.


Stroustrup mismo aconseja no aprender C primero. Pero, una vez más, él (y muchos otros de su generación) lograron convertirse en un gurú de C ++ a partir de C.


Si bien es cierto que C ++ fue diseñado para mantener un alto grado de compatibilidad con C y un subconjunto de lo que aprendes en C ++ se aplicará a C, la mentalidad es completamente diferente. La programación de C ++ con Boost o STL es una experiencia muy diferente a la programación en C.

Hubo un término artístico llamado C ++ como una mejor C. Esto significó el uso de algunas características y herramientas del lenguaje C ++ para facilitar la programación de C (por ejemplo, declarar la variable de índice de un ciclo for en la instrucción for). Pero ahora, el desarrollo moderno de C ++ parece ser muy diferente de C, aparte de una gran parte de la sintaxis, y en esos casos, el legado de C a menudo parece ser una carga más que un beneficio.


Si alguno de los alumnos de la clase pretende convertirse en ingenieros de software incrustados, es posible que no tengan otra opción que programar en C (consulte esta pregunta , y esta , entre otras).

Por supuesto, después de haber aprendido C ++, puede ser menos una transición para ellos que comenzar de cero, ¡pero aún hace que la declaración de su profesor sea incierta!