Conozco C # bastante bien (autodidacta, lamentablemente) y necesito hacer algo de programación en C ++ para una aplicación de Windows. He podido encontrar un montón de información para los desarrolladores de C ++ que aprenden C #, pero no he podido encontrar mucha información sobre el aprendizaje de C ++ cuando ya conoces C #. ¿Alguien ha encontrado un buen resumen de lo básico?
MSDN tiene una comparación pero no es muy profunda.
Puedo juntar varias fuentes, pero pensé que había algo ahí afuera, simplemente no puedo encontrarlo. Gracias por tu ayuda.
Respuestas:
Este hilo en C ++ para desarrolladores de Java es muy similar y debería ser útil, especialmente la publicación de Mark Byer:
Probablemente lo más importante a tener en cuenta es comprender la diferencia en las técnicas de administración de memoria entre C # / Java y C ++ .
Uno de mis profesores provenía de un entorno Java y enseñó un curso introductorio de C ++ pensando que sería un pastel. Nada de lo que explicó tenía sentido para nadie. Había tenido pérdidas de memoria por todas partes. Su puntero aritmético era terrible. Nunca llegó a la parte OOP del programa de estudios (gracias a Dios). Prácticamente nada de lo que demostró se habría compilado. No entendía que
char[]
necesitaba un centinela\0
. No termines como él.fuente
char[]
entonces , ¿no?char[]
rara vez se use en C ++ no significa que no se enseñe o que no se deba enseñar.char[]
Todavía es importante tener en cuenta que C ++ es un superconjunto de C, y es imprescindible que se entienda correctamente para poder aprenderlo.std::string
, y si tiene que interoperar con una API de C, entonces para esoc_str()
está. No es necesario que el programador lidie con lachar[]
terminación NULL en nada de eso. El manejo de cadenas de estilo C es completamente y totalmente obsoleto para cada uso posible, excepto la interoperabilidad con el código C antiguo, que está perfectamente bien manejadoc_str()
.char[]
bien, porque todos los usos dechar[]
están mal. Su profesor probablemente habría sido absolutamente bien si hubiera pegado a C ++ en lugar de CDesafortunadamente, no hay mucho sobre C ++ que sea básico, por lo que no me haría ilusiones. Además, hay muy poco que sabrá sobre C # que sea incluso transferible de forma remota a C ++, por lo que no esperaría que exista ningún material específico que cubra ese ángulo. Tendrás que aprender desde cero.
fuente
cout
y formas simples de lograr objetivos simplesNo hay una solución fácil para esto, C ++ no es particularmente difícil, pero no es fácil para los principiantes.
Recomendaría leer los conceptos básicos de la programación en C (para obtener una base de las cosas de bajo nivel que encontrará), luego aprender el STL, seguido de artículos de la talla de Scott Meyers. Aquí hay uno para comenzar, ya que muestra cómo debería escribir C ++ moderno, en comparación con C-with-classes.
fuente
reading up on C programming
. Creo que esto hace más daño que bien y confirma la noción de que C y C ++ son lenguajes que deben estudiarse juntos.delete
y las matrices de C y otras cosas que se desaconsejan en C ++ de lo que lo hicieron, lo que atribuyo a NO estudiar explícitamente C. C es relativamente simple, puede descubrir muy rápidamente lo que hace el código.malloc
yfree
. Un gran desarrollador de C ++ eventualmente querrá saber sobre ellos. Comenzar con ellos es algo completamente diferente.No estoy seguro de si todavía está buscando materiales, encontré este artículo hace unos meses. No es un libro (solo 53 páginas). La introducción lo dice todo:
This is a somewhat short guide to the important things to know if you are a C# programmer and find yourself needing or wanting to work in C++
http://geekswithblogs.net/mikebmcl/archive/2012/02/02/c-to-c-ndash-a-somewhat-short-guide.aspx
Y también hay una publicación de actualización también:
http://geekswithblogs.net/mikebmcl/archive/2012/02/14/c-to-cndasha-somewhat-short-guide-update-1.aspx
Feliz aprendizaje :)
fuente
fuente
Creo que es bueno que no encuentres demasiados tutoriales de C # a C ++. Probablemente puedan confundir tu cerebro. Es muy parecido a tratar de aprender a conducir una motocicleta primero y luego cambiar a una bicicleta (no es una anología completamente apropiada, pero se entiende). Es mejor que tome un libro nuevo sobre C ++. Como ya está familiarizado con los conceptos de OOP, puede omitir las largas introducciones a los conceptos de OOP (están destinados a personas que migran de C a C ++). O diríjase directamente a un libro de referencia destinado a niveles de principiante a intermedio o intermedio.
fuente
Recomendaría ir a Rosetta Code y comparar los dos. Mientras esté allí, tenga a mano un enlace de expresiones idiomáticas de C ++ e intente detectarlas. Luego, pase un tiempo en el dominio puntero / referencia / memoria / destructor. Después de eso, aprenda sobre el preprocesador: realmente puede ser su amigo cuando se trata de ocultar a los feos, de alguna manera lo extraño. Finalmente, el STL.
fuente
Entonces, hace aproximadamente un año, estaba en el mismo barco que usted: un autodidacta C # dev que sentía la necesidad de aprender C ++. Por supuesto, me detuve y comencé varias veces. En mi tercer intento, finalmente lo atravesé.
Lo que es imprescindible comprender es que, en términos de metodologías C ++ y C #, es probable que pase mucho tiempo entendiendo qué significan realmente los métodos de manipulación de datos a través de punteros y referencias , así como cuándo y cómo usarlos dadas las circunstancias.
Lo bueno de C ++ es que la asignación de la pila de objetos es bastante simple en su mayor parte, y debe asignar objetos de esta manera si su programa cumple con los requisitos especificados en este método. De lo contrario, dependerá de los punteros para obtener velocidad, eficiencia y limpieza rápida. Recomiendo leer esto: http://www.parashift.com/c++-faq-lite/ ya que le dará MUCHA comprensión técnica de cómo funciona C ++ bajo el capó.
Dejame darte un ejemplo:
En C ++ existe esta implementación de constructor conocida como "lista de inicialización", que difiere de inicializar miembros de clase en el cuerpo de un constructor. ¿Por qué? Porque a menos que el tipo que se inicialice sea primitivo, el compilador creará copias múltiples e innecesarias del objeto que se crea cuando se asigna en el cuerpo del ctor. Potencialmente, esto puede reducir el rendimiento, dependiendo del compilador y de los requisitos escalados de la aplicación.
¿Sabes qué es un delegado? Bueno, en C ++ se conoce como puntero de función . Este lenguaje es bastante difícil de dominar al principio, pero si quieres ser increíble ... definitivamente es obligatorio.
C # es fácil ... muy fácil.
fuente
Créeme, elige un buen libro sobre C ++ (hay mucho más, solo haz una búsqueda) y comienza a aprender ...
fuente