I don't know any good books from the beginning, but I'm sure you can't go wrong with Stroustrup, like ganesh suggests.
I say, once you get through a C++ book that starts from the beginning and ends in somewhat advanced Object-Oriented Programming topics. Then you should definitely get project(s) going on your own (or with friends). A computer game is always a fun start and usually pushes forward heavy requirements in proper software design, but there are plenty of other "more serious" options too (not that I mean that computer game programming is not serious!), like web services, scientific computing, artificial intelligence, robotics, databases, etc., you take your pick! The world of programming is virtually free and open to you, you let your imagination drive you!
As you progress through your projects, you probably want to check out the Parashift FAQ Lite which has tons of answers to all those specific questions that will arise (you know, questions like "what happens if I...?" "am I allowed to...?" "is it recommended to...?" etc.). And get used to referring heavily on www.cplusplus.com and other reference website that use strict language and precise explanations (often beginners find those a bit cryptic).
Once you are able to pretty much go through that entire FAQ Lite without getting any surprises about things you didn't know or didn't understand, then you are a pretty advanced programmer already (at least in terms of knowledge in C++). But don't try and just read through it all immediately, you will have trouble properly understanding it until you have at least gone through a basic C++ book and a bit of practice on your own (and not just book exercises).
Finally, to go the extra mile for the "expert" title, you can devour a bunch of books on best practices in C++. One I recommend is "C++ Coding Standards: 101 rules, guidelines and best practices" by Alexandrescu and Sutter. And any other books in the "C++ In-Depth Series". BTW, by the time you get to this point, you will probably have near to or more than a million lines of code written and already have a decent job involving C++ programming (usually employers are quite happy with intermediate and advanced programmers for hire).
Template meta-programming is also another big chunk of C++ that can only come quite late because it is quite a bit more abstract than normal C++. Once you are fully comfortable with that, you can call yourself a Master (I'm not quite there yet).
When there isn't a piece of code you cannot compile in your mind, when there isn't a design idiom you haven't heard about and implemented, when you can cite paragraphs of the latest c++ standard without pausing... then you are a GURU and you can start publishing books on C++ programming (of course, that's not a formal requirement.. but maybe it should be).
Last couple weeks I've been reading "Beginning C++ Through Game Programming" by Michael Dawson. I was worried that it would be somewhat lame because I've been reading some more-advanced stuff lately, but it's actually been a rather enjoyable read. It covers all your basics (types, control structures, etc.) plus a variety of topics including classes, DMA, inheritance and polymorphism. It's got a couple quirky things in it that I would probably do differently, but they are used to demonstrate the current topic and they help.
I've read several Beginning C++ books in the last year or so, and this really is the only one so far that has much of anything to speak of concerning inheritance and polymorph, which is really what I've been looking for.