I think "better" is a very vague term. As you indicate it depends on what you need to do. I would say that it is easier to develop many types of applications more quickly and cleanly.
If you know C++, and do good OOP, you should be able to pick up C# relatively quickly. However, the converse is probably not true. C++ is harder to get to grips with, and to write good code. Having said that I have also seen some very bad code in C#.
There are several differences, which I don't think I could do justice here. The one that people always quote is that "C# has no pointers". Well, yes and no. C# uses references to most objects. If you're used to using references in C++ then it's not that difficult to get your head around. However, they are more like pointers in that a reference can be null (by default!) whereas in C++ you have to write some stupid code to end up with a null reference.
As to books, by far and away the best and most useful books I have found, and probably the only two you'll ever need are:
CLR via C#[
^] and
Effective C#[
^].
Personally these days I would choose C# over C++ unless it wasn't an option. Practically, off the top of my head, that probably means having to revert to C++:
1) if you're writing an application that you want to use on a system where the CLR/.NET isn't available. (I'm not up to speed with how progress of implementing it on systems other than Windows is going).
2) if you're writing a module that needs to be invoked by another non-CLR application
3) if your module or application will interface heavily with non-CLR code and the overhead of developing the classes to interact with it (through P/Invoke calls) would be too great or overly complicated
4) there may be other reasons (such as writing embedded code?) but I can't think of everything; I'm sure other people will comment to tell me something I've said is wrong :)
Regards,
Ian.