Soy estudiante de informática y, como resultado, me enseñaron C ++ como una mejor versión de C con clases. Termino tratando de reinventar la rueda cada vez que se necesita una solución a un problema complejo, solo para encontrar en algún momento después de eso, alguna característica del lenguaje o alguna rutina de biblioteca estándar podría haberlo hecho por mí.
Me siento cómodo con mi char*
y mis *(int*)(someVoidPointer)
expresiones idiomáticas, pero recientemente, después de hacer una contribución (menor) a un proyecto de código abierto, siento que no es así como se supone que uno debe pensar al escribir código C ++. Es muy diferente a C es.
Teniendo en cuenta que conozco bastante bien la programación orientada a objeciones, y estoy de acuerdo con una curva de aprendizaje empinada, ¿qué me sugerirías para que tenga mi mente en la pista de C ++ cuando estoy codificando C ++?
Respuestas:
Según sus comentarios, conoce la sintaxis de C ++.
No está codificando en C ++, pero a menudo se lo denomina C con clases.
La etiqueta C ++ en stackoverflow es un buen lugar para comenzar, incluye una lista de lectura y preguntas frecuentes .
La única forma real de aprender es escribir código y obtener comentarios de usuarios experimentados. Puede poner su código aquí para su revisión. Un buen ejemplo
Deja de usarlos, cambia a std :: string.
Deje de usarlos (aparte de la interfaz con el código C). El uso del concepto de functor proporciona varias ventajas (incluida la idea de encapsular el estado).
Sí. C y C ++ han divergido como lenguajes. Aunque puede usar prácticamente la misma sintaxis, lo que se considera un buen código C generalmente no se considera un buen código C ++ (o viceversa).
Tienes los conceptos básicos abajo.
Con mucho trabajo :-)
fuente
El libro Effective C ++ enseña una serie de cosas interesantes y lo llevará a apreciar las características de C ++. También existe un STL efectivo : no lo he leído, pero estoy seguro de que sería una gran lectura si no está familiarizado con el STD.
Lo importante que debe aprender es que debe hacer uso del lenguaje y no reinventar la rueda constantemente . Ya has aprendido cómo hacerlos, así que hazlo fácil para ti (¡y para los demás!) Y usa herramientas para todo su potencial.
Como nota al margen, se encontrará con muchas personas que exigen que se use la ETS. Esta es una mentalidad tan mala como solo usarla
char*
: a veces no es la herramienta correcta y existen muchas otras. En el mismo sentido, no se desanime de hacer sus propias clases de contenedores: si va a usarchar*
el mejor lugar para hacerlo, está envuelto de forma segura dentro de una clase.fuente
Puedo recomendar la reciente toma BUILD dada por Herb Sutter. El llamado " Escribir código C ++ moderno: cómo C ++ ha evolucionado a lo largo de los años ":
No es una mala presentación, no es demasiado larga, tiene algunos buenos indicadores de las nuevas características en el último estándar que le darán algunas pistas para actualizar su antiguo estilo C / C ++.
Aparte de eso, debe aprender el STL: no es complicado y hay muchos libros, por ejemplo, STL efectivo, o simplemente google para tutoriales de STL para que pueda comenzar.
fuente
Leí Accelerated C ++ de Andrew Koenig y Barbara Moo para ayudarme a enseñar C ++, después de haber trabajado con C ++ durante casi una década. (De hecho, estaba empezando a jugar con la metaprogramación de plantillas en ese momento). Todavía me pareció una revelación, aunque no creo que me haya enseñado ningún hecho nuevo sobre el lenguaje. 1
Sin embargo, lo que me enseñó fue mirar y usar C ++ como lenguaje de alto nivel. Para no jugar con punteros en bruto
delete
y usar la biblioteca estándar siempre que sea posible.Tengo la sensación de que esto es exactamente lo que buscas.
1 No es que no quedara nada para enseñarme en ese entonces (hay mucho incluso ahora, una década más tarde), pero solo hay tanto conocimiento que puede incluir en un libro introductorio de 250 páginas.
fuente
Antes de responder, una nota: Idiomatic C ++ es un objetivo en movimiento. A medida que cambia el idioma, también lo hacen sus modismos. De hecho, algunas características del lenguaje están destinadas a permitirnos eliminar el código idiomático que podría simplificarse o mejorarse con algún soporte del lenguaje en sí, o al menos la biblioteca estándar. Por lo tanto, tenga en cuenta que cualquier fuente solo puede informarle sobre lo que era idiomático al momento de escribir .
Dicho esto, harías bien en revisar:
El sitio codereview.SX
La red StackExchange tiene un sitio llamado codereview.stackexchange.com . Si ha escrito un fragmento de código C ++, una clase, una parte de una biblioteca, algo que no es demasiado grande, puede publicarlo allí y pedirle a la comunidad que lo revise. Tenga en cuenta que el código tiene que compilarse y ser básicamente funcional: ese sitio no es para depurar.
Además, puede buscar algún código de C ++ allí, relacionado con lo que está trabajando, y ver qué enfatizan los revisores. Incluso podría intentar revisar el código publicado usted mismo sin publicar una respuesta, luego leer lo que otros piensan de él.
Presentaciones en video de la conferencia C ++
Hay varias conferencias de desarrolladores centradas en C ++ cada año:
y esos ni siquiera son los únicos ... de todos modos, cada uno de estos publica videos de muchas / todas las presentaciones. Estos le enseñarán mucho , incluida una codificación idiomática, y un principio con el que puede decidir qué debería o no ser idiomático.
A veces incluso puedes obtener las cubiertas deslizantes de los altavoces.
fuente
Bueno, los proyectos de código abierto son un muy buen comienzo. No esperes convertirte en un programador profesional basado en tus clases universitarias, no están destinadas para eso (como escribí en mi respuesta aquí ).
Parece que conoces la sintaxis, eso es bueno. Ahora ve y lee el código de otros, y contribuye con el tuyo para las revisiones por pares. Aprenderá mucho leyendo código e intentando comprenderlo, depurándolo y reparándolo, y por supuesto, agregando a esto las convenciones de codificación que ya existen.
Los libros profesionales también son una muy buena idea, como se mencionó, y navegar por las preguntas y respuestas en StackOverflow le enseñará mucho (seguramente me enseña mucho, y me considero un profesional de C ++).
fuente
Leer un montón de buen código C ++ probablemente ayudará. Tienes que ver el código para comenzar a sentirlo. Por otra parte, la mayor parte del código de C ++ está mal.
fuente