tags:

views:

258

answers:

8

In my early days of programming, before I started working professionally, I wrote a fair share of trinket/exercise apps in C++ and felt fairly confident that I know the language. Then, as opportunity came, I went to do real work and left the C/C++ world. For the past 5 years I've written tons of code in C# and have had scarcely any encounters with the C/C++ languages. Now, after spending some time on SO and teh interwebs, I see that what I thought I know as "C++" is actually a mix between C and C++, with large gaps in my knowledge about the more intricate workings of the language. At the same time I also realize that I am intrigued by the language and would like to learn it more.

Googling for "C++ tutorials" reveals a wealth of tutorials, but they are all aimed at complete beginners, spending a lot of time explaining basics that I'm already familiar with. I don't expect that there will be any tutorials made exactly for me, but are there some that have at least been written with an experienced programmer in mind, not spending a lot of time on trivial things, and discussing the finer points of the language and compilers?

+4  A: 

1.C++ Object model is nice book for professinals.

2.Design and evolution of C++ by bjarne stroustrup give u in depth insight.

3.Scott Meyers' Effective C++ series is also nice one.

Ashish
+6  A: 

C++ is a very old language so there are lots of good books available. I would recommend to read those books, rather than searching sites and blogs. My personal experience says in harder to find lot of good articles at one place, by most of the good articles are already in books.

Regarding sites:

Dr. Dobb's site and journal have lots of good articles.

Books: Effective C++

Exceptional C++

C++ Object Model

Bjarne Stroustrup

Beyond the C++ Standard Library

Priyank Bolia
+1 for Meyers' Effective books, they are stellar.
Binary Worrier
Hmm... I'm not a fan of books, but I see your point. I'll see if I can get my hands on some of them.
Vilx-
+9  A: 

C++ is too complex to be learned through tutorials, you could only scratch the surface that way. Especially the advanced usage of the STL (and templates in general) is usually beyond the scope of online tutorials.

Therefore, I would recommend books: Stroustrup's "The C++ Programming Language", and Scott Meyer's "Effective C++", "More effective C++" and "Effective STL".

You can skip the first few chapters of Stroustrup if you feel confident you know that part already, but it's the best book for going into the details of the language. There should be a law for every aspiring C++ programmer to read at least the first two of Meyer's books I mentioned.

DevSolar
+1. Vilx-: I think Stroustrup's book is exactly what you're asking for. It's a great book.
Jason Orendorff
I've been programming in C++ for 10+ years, and I still read Stroustrup from time to time.
Kieveli
Our local 'gurus' still refer to Stroustrup's book for obscure detail of syntax from time to time :) I would argue that "Effective C++" and "Effective STL" should better come first, but I have never been fan of the 'syntax' itself, I prefer the concepts.
Matthieu M.
It doesn't matter much which one you've read first. IMHO, you need both before you can touch non-trivial C++ without hurting yourself. ;-)
DevSolar
+1. C++ tutorials considered harmful. :)Almost every C++ tutorial I've seen teaches horrible practices (and frequently relies on undefined behavior or nonstandard extensions)
jalf
Accepted, because I got the Stroustrup's book. Otherwise all the answers are great!
Vilx-
+4  A: 

I suggest, though rather as supplement, the C++ FAQ Lite. It has information ranging from basic things to really obscure C++ features and many tips to write good C++ and helped me more than once when some stupid template thing or whatever wouldn't do what I expect.

OregonGhost
I suggest C++ FQA Lite as an optional supplement to C++ FAQ Lite. Though it's littered with C++ hate most of us don't want to hear, the author obviously has a much deeper experience and understanding of C++ than the original FAQ author. :)
3yE
@3yE, I disagree with that. I'd avoid the Frequently Questioned Answers until you're an expert with the language. The author of that site is not obviously more experienced - he's just been burned by other people's code far too often. I think you have to really know what you're doing before you can see through the hate to appreciate what the author is trying to say.
Kristo
@oregonGhost, that's an excellent resource. It'll especially help the OP unlearn any C habits he may have. +1.
Kristo
Nice. I'll keep in mind that this is resource might have flaws, but reading it will give me already something to start on, while I search for books.
Vilx-
@3yE: I freely admit that C++ is among the ugliest languages around, from a laboratory standpoint. (If it tells something about me that my favourite languages are C++, Perl, and bash, it isn't something good.) But I doubt there is any other language as *versatile* as C++, something I believe the FQA author hasn't come to grips with yet. Yes, C++ code is compiled to pure binary - which means I can write a kernel in it, which I can't with bytecode. Yes, <iostream> can be ugly - but I can always use <cstdio> as well. And so it continues. I don't like "emotional" approaches like the FQA.
DevSolar
I would go for the "C++ FAQ" book itself. It is well organized and hits on the important and tricky parts of the language.
jay
@DevSolar: You can write a kernel with (mostly) byte code. Have a look at the Singularity project :)
OregonGhost
A: 

You probably want to skip the stuff you already know and move on to harder more fun stuff. I assume you already know a lot about the language and it's syntax, methods, classes, etc.

Where to start? Well, there are very good books and papers on the language. I can recommend many books on the language but you can probably find them using the stackoverflow search.

I can only tell you what you already know. You wont find a book that covers it all. You will have to browse through many books in order to get what you desire. Take a randomly recommended book, browse through it skip the stuff you know and try to fit it all together. Try to make something out of the fresh knowledge by writing some code to understand it better. Do it until you understand it fully.

Here is a brief tutorial for advanced C programmers to refresh your memory on the language.

Secko
+2  A: 

Workings of the language? What areas exactly do you think are worth improving? I have a slight trouble extracting it from your question.

One book that i always keep on my table and peek into frequently is C++ Primer by Lippman et al, 4th ed., ISBN 0-201-72148-1. This is not a tutorial, this is a reference. Whenever you have a question about the language itself, this is where you can find a short and precise answer.

If you want specifically a tutorial which aims at experienced C programmers, see Bruce Eckel's Thinking in C++. Available as free download on author's site and also printed through Prentice Hall.

At some point you will have learnt a great many things which you CAN do, from then on, you should learn what NOT to do. This is a long and painful part, and i don't have a precise recipy, but accept my sympathies. The deeper you get involved into complex stuff the more likely is it to bite you at some point due to conflicts between language features. I suggest taking a look at Imperfect C++ by Matthew Wilson, C++ Coding Standards by Sutter and Alexandrescu.

3yE
Well... put it this way - I'm comfortable with pointers, yet when asterisks and ampersands start flying around I easily get lost in the many levels of misdirection. I have an approximate understanding of templates (based on my understanding about .NET generics), yet have never used them. The necessity and usage of the "const" keyword eludes me. Etc. My knowledge of the language's features could be best summarized as "I don't know half of you half as well as I should like; and I like less than half of you half as well as you deserve." I can write code in C++, but it will be far from elegant.
Vilx-
+3  A: 

You've gotten a number of good recommendations, but none seems to have included the one that was really written to fit your situation. Accelerated C++ was written for people who already know the basics of programming, and just want to learn how to program in C++.

Jerry Coffin
A: 

Essential C++ by Lippman is a small but great book.

0A0D