2010-01-16 11 views
9

Como he usado sobre todo lenguajes de guiones en el pasado pero ahora quiero ir al nivel de "alto rendimiento", decidí aprender C++ hace algún tiempo.Aprendiendo C++ ¿verdad?

Miré algunos tutoriales "para principiantes" y compré un libro de referencia de bolsillo O'Reilly C++ (es realmente útil). Mi problema es que ahora sé todos los conceptos básicos, pero aún no soy lo suficientemente bueno para programar un juego más complicado, por ejemplo.

  • ¿Tengo que obtener uno de esos libros gruesos en C++ para seguir aprendiendo?
  • Voy a utilizar C++ en Windows principalmente. ¿Qué APIs junto a Win32 son importantes para mí?
  • Mi objetivo sería escribir un pequeño intérprete para un lenguaje de programación al que me haya referido. Ya lo logré en varios lenguajes de scripting, ¿qué conocimiento de API/Library necesito en C++ para escribir uno?

Respuesta

8
  1. No necesita un libro grueso, necesita uno bueno. Obtener Accelerated C++, escrito por Koenig & MOO, dos de los C++ equipo de desarrollo original.

  2. Depende de lo que quieras hacer.

  3. No necesita nada; puede escribir un intérprete o compilador perfectamente bueno usando solo la biblioteca estándar de C++. Consulte esto SO question para obtener mucha información en esta área.

+0

Recomendaría efectivo C++ y stl efectivo de inmediato también. – Rick

+0

Me encanta la cita que tienen sobre ese libro: "Cualquiera que lea solo este libro y trabaje con ejemplos y ejercicios tendrá las mismas habilidades que muchos programadores profesionales". Lamentablemente, eso no dice mucho en absoluto. :-) – Ken

1

Siempre he encontrado que aprender un idioma de un libro es bastante difícil y que después de conocer los conceptos básicos debe comenzar a programar. Así que en vez de coger un grueso manual Me echa un vistazo a algo así como http://www.cprogramming.com/tutorial.html#advanced o simplemente google para C++ tutorial y algo que le gustaría tratar de hacer.

+3

Debe evitar todos los tutoriales en línea de C++ como la peste: están uniformemente equivocados o totalmente equivocados. –

+1

@Neil: un poco fuerte. Hay buenos puntos en varios tutoriales, pero estoy de acuerdo con que la relación señal/ruido es baja, o incluso negativa, con muchas sugerencias activamente dañinas. –

+0

Solo tienes que encontrar algunos que sean buenos. Al igual que los libros, no todos son perfectos. La clave es trabajar en algunos ejemplos de la vida real. Después de leer suficientes libros, realmente no obtienes nada sin hacerlo y experimentar con él. – Joe

0

Para C++ en Windows, definitivamente aprenda Microsoft Foundation Classes (MFC). Sin MFC, tiene que implementar todas las cosas de la API de Windows usted mismo, que es más C que C++ y puede ser bastante doloroso.

También es posible que desee obtener, aprender y utilizar las bibliotecas boost C++. No son ventanas específicas, pero son un gran recurso para cualquier persona.

+10

MFC es tecnología muerta. Si desea escribir GUI de Windows, use Qt o renuncie a C++ y use C#. –

+0

Hay que tener en cuenta (lo sé, que lo sabes, Neil) que saber Qt también te permite desarrollar aplicaciones gui multiplataforma con lo que, en mi opinión, podría describirse como un esfuerzo mínimo posible (suponiendo que solo estamos hablando acerca de C++ aquí). – shylent

+0

@Neil: un reemplazo más directo es WTL (recientemente elegido por Chrome), e imagino que varias características extrañas e interesantes que admite Windows serían más difíciles de usar en Qt debido a la falta de coincidencia de la interfaz. Por supuesto, hago mi propia versión, entonces, ¿qué sé yo? :) –

1
  • Un buen (y) delgado libro para comenzar en C++ es Accelerated C++ por Koenig and Moo.
  • Principalmente hago programación bajo Linux, pero escucho muchas cosas malas sobre MFC, así que trataría de encontrar una biblioteca de GUI diferente.
  • Una vez que se pone al día con algunas de las partes más complicadas de la sintaxis de C++, eche un vistazo a las bibliotecas Boost.Spirit para la generación del analizador. Las diversas bibliotecas de Boost proporcionan algunas extensiones muy útiles para la Biblioteca estándar.
1

Honestamente, Al aprender C++, nunca recogí un libro (no llame por favor). El mejor consejo que puedo dar es ir al this page y seguir el tutorial. Cubre la mayoría del lenguaje C++ (léase: las características más comúnmente utilizadas) y lo mantiene lo más simple posible. En cuanto a las API que son importantes ... bueno, eso es una cuestión de preferencia. Ningún toolkit/api realmente ha "ganado", pero Qt, GTK-- (gtkmm) y wxWidgets son todos grandes jugadores. Además de las GUI, es probable que desee aprender las API raw winsock2 y threading o las interfaces de red y subprocesamiento de la biblioteca boost.Estoy de acuerdo en que MFC está muriendo, y para el desarrollo de solo Windows C# está tomando un papel cada vez más grande (incluso en linux/mono C# está empezando a ponerse de moda ... lentamente).

Además, la mejor manera de aprender un idioma es codificar. Así que no solo leas un montón: sin experiencia práctica nunca aprenderás el idioma. Haga preguntas, responda las que pueda y escriba tutoriales, para usted, si nadie más. Anotar lo que has aprendido es una gran referencia, y el proceso de enderezar todo en tu cabeza para escribirlo de manera que otra persona pueda entenderlo sola es una gran manera de reforzar los conceptos. De una manera extraña, pero aparentemente a la inversa, encontré que la mejor forma en que aprendo la programación es ayudando a otras personas con sus preguntas.

@ Neil- estoy en desacuerdo con que los tutoriales en línea son "completamente erróneos". En todo caso, el estilo que le enseñen podría estar orientado a la legibilidad más que a la optimización, lo que en mi opinión no tan humilde es una ventaja. En mi experiencia limitada, encontré cplusplus.com una referencia de referencia para casi todo.

Específicamente, para responder a sus preguntas: 1. No es necesario un libro grueso. Sin embargo, he oído que los más delgados pueden ser útiles como referencia rápida.

  1. Es completamente subjetivo y depende de su objetivo. La red de Boost y las bibliotecas de subprocesos múltiples probablemente sean un buen comienzo.

  2. entre std :: string, std :: stringstream y getline (std :: istream &, std :: string &) que debe ser bastante bueno. C++ viene con una gran cantidad de funcionalidades integradas pero no es demasiado hinchado/enorme/imposible de aprender. Toma ventaja de eso. Todo el análisis ya está incorporado.

2

Aprender con libros. C++ es un lenguaje complejo. Mi sugerencia es ir primero con una introducción bastante rápida y una visión general de los principales paradigmas de programación compatibles con C++: OOP y programación genérica: Acelerado C++.

Cuando termine este libro, puede ir con los dos volúmenes de de Bruce Eckel Pensando en C++ que son muy detallados.

Para la programación de la interfaz de usuario, el mejor conjunto de herramientas de C++ es Qt, y está listo para múltiples formatos. Puede leer "Programación de la GUI de C++ con Qt4" (la primera edición se puede descargar gratis, solo googleela). Si quiere seguir con la API de C++/Windows, aprenda la Biblioteca de plantillas de Windows, aunque puede ser un poco difícil debido a la falta de documentación oficial (aunque hay buenos tutoriales en la red). WTL es el camino a seguir para crear aplicaciones muy pequeñas y livianas (las Qt DLL en el otro lado, necesitan unos pocos MB cada una).

0

Recomiendo encarecidamente Stroustrup's Intro C++ book. Cubre C++ y STL de una manera muy accesible.

Después de eso, puede considerar buscar libros en Qt, un juego de herramientas GUI multiplataforma, o WTL o MFC para Windows. Podrías hacer .NET + C++, pero eso sería mucho para aprender. En mi experiencia con Qt y MFC, los libros no han ayudado mucho. Manipular aplicaciones de muestra, crear pequeñas aplicaciones solo para probar un tipo de característica y hurgar en los documentos era la única forma en que podía entender mi biblioteca. Los libros que había tendido a simplemente pasar por alto demasiado - no valían la pena el dinero.

1

Por favor, por el bien de Pete, no use directamente la API de Win32. Te pintarás en la esquina de Microsoft.Hay un montón de bibliotecas multiplataforma por ahí que puede utilizar en su lugar:

  • biblioteca Standard C++: cuerdas, archivo de E/S, contenedores, algoritmos
  • Boost para la materia de todos los días que quedan fuera de la biblioteca estándar : analizando, redes, subprocesos, punteros inteligentes, agrupaciones de memoria, fecha/hora, matrices, etc. ... Las bibliotecas Boost son revisadas por pares antes de ser aceptadas y son de alta calidad. Boost es el caldo de cultivo para las bibliotecas que finalmente se convertirán en parte del próximo estándar de C++.
  • GUI Toolkits: Qt y wxWidgets son muy maduros y ampliamente utilizados. Hay muchos más.