I am a vc++ developer but I spend most of my time learning c++.What are all the things I should know as a vc developer.
You should learn the MFC library. In my opinion, it is a vey good lib especially for making GUI applications.
Most importantly, the Debugger.
And if you are into MFC/ATL Development, than those libraries off course.
Other things such as how to enable exceptions while debugging, how to load debugging symbols from disk paths etc are always of great help.
Actually, it really depends on what kind of projects you work on.
You could learn .NET Interoperability if you are doing some Mixed-mode Development.
You could learn ATL + COM if you are into developing COM Components.
There are several other frameworks but as I said, it really depends on what you are doing.
Learn about the Standard Template Library. Also look into Boost Libraries. Both of these (STL especially) should save you a lot of time and create cleaner looking code.
STL and boost, why? :) You also need to learn the Win32 API.
MFC, although still supported, is IMHO not a serious challenger when you think about C#/XAML.
I find MFC to be too old fashioned. I've worked with in the early 2000, it's got some interesting things to look at, but really, that's not the way things should be done any more.
I think the .net CLI framework would be an exceptionally useful framework to become familiar with if you're into developing GUI apps on the PC.
wxWidgets is another excellent framework for GUI development (actually it has a lot of other very useful bits to it as well which are worth checking out).
Definitely agree with learning the VC Debugger - spend as much time as you can with it - it can be your best friend.
Here's a link on vc debugger tips and tricks ( though I've not verified all contents in there )
For UI, I'd take a look at WTL. It produces considerably smaller exes than MFC which is prone to code bloat
For other UI framworks in C++ - I'd recommend Qt and wxWidgets
I don't understand why people here post things about WinAPI, .NET, MFC and ATL.
You really must know the language. Another benefit would be the cross platform libraries. C++ is not about GUI or Win32 programming. You can write Multi-Platform application with libraries like boost, QT, wxWidgets (may be some XML parser libs).
Visual C++ is a great IDE to develop C++ application and Microsoft is trying hard to make Visual C++ more standard conform. Learning standard language without dialects (MS dialect as well) will give you an advantage of Rapid Development Environment combined with multi-platform portability. There are many abstraction libraries out there, which work equally on Windows, Linux, Unix or Mac OS. Debugger is a great app in VC++ but not the first thing to start with. Try to write unit tests for your application. They will ensure on next modifications that you did not broke other part of tested (or may be debugged:) code.
Do not try to learn MFC or ATL from scratch, try to understand STL. MFC is old, and new version are more or less wrapper around ATL. ATL is some strange lib, which tries to marry STL-idioms (and sometimes STL itself) and WinAPI. But using ATL concepts without knowing what is behind, will make you unproductive as well. Some ATL idioms are very questionable and might be replaced by some better from boost or libs alike.
The most important things to learn are the language philosophy and concepts. I suggest you to dive into the language and read some serious books:
- Design & Evolution of C++ by B. Stroustrup
- Inside the C++ Object Model by S. Lippman
- Design Patterns: Elements of Reusable Object-Oriented Software by GoF
- C++ Gotchas: Avoiding Common Problems in Coding and Design by S. Dewhurst
- Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions by. H. Sutter
- More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions by H. Sutter
- Exceptional C++ Style: 40 New Engineering Puzzles, Programming Problems, and Solutions by H. Sutter
When here you will be a very advanced C++ developer Next books will make guru out of you:
- Modern C++ Design: Generic Programming and Design Patterns Applied by A. Alexandrescu
- C++ Templates: The Complete Guide by by D. Vandevoorde, N. Josuttis
- C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond by D. Abrahams, A. Gurtovoy
- Large-Scale C++ Software Design by J. Lakos
Remember one important rule: If you have a question, try to find an answer to it in ISO C++ Standard (i.e. Standard document) first. Doing so you will come along many other similar things, which will make you think about the language design.
Hope that book list helps you. Concepts from these books you will see in all well designed modern C++ frameworks.
With Kind Regards,
Ovanes