This is one of the questions where I'm really tempted just to say “wrong” – because basically, C# and C++ share (next to) no core concepts. Their names are intentionally similar, as is their syntax – but that's just a marketing trick.
C#'s core concepts say that it is an object-oriented, framework-supported language explicitly targeting Windows development. C# was developed to make RAD (rapid application development) in the tradition of VB6 possible, and offers facilities to work well with Smart Client (= classical windows) as well as web applications. Subsequent versions of C# have basically brought more of the same, albeit jumping on every marketing bandwagon along the way. Not that this is a bad thing, because it means that C# now has some really fancy features borrowed from functional programming. All in all, C# focuses on making programming even large systems relatively easy and safe (if something goes wrong, it does so on a high level; resources such as memory pointers are almost never corrupted).
C++ is fundamentally differently geared. C++ originally started out with the goal to be an object-oriented extension to C so there's at least some similarity to C# concepts: OOP. However, for at least 15 years, the development of C++ has parted from this path radically.
While OOP is still possible in C++, it is obviously no longer the main focus. C++ is called by its inventor (Stroustrup) “general purpose with a bias towards system programming” but that's rather unhelpful. C++ now really focuses on three main concepts: RAII (a very powerful mechanism to manage resources), template (meta-) programming and an unfortunate quasi-compatibility to C.
The latter is one of the reasons for C++' commercial success because it means that C++ can basically act as a drop-in replacement in large C systems that couldn't be rewritten from scratch. However, together with C++' meandering development pathway, it is also responsible for the convoluted syntax that is the target of a lot of (justified) criticism.
On the other hand, this also means that today C++ is in the rather unique position of offering a very high level of abstraction for the work with algorithms and data structures, at zero cost. Good C++ code can be just as efficient as good C or good FORTRAN code on the machine level (heck, even as efficient as good assembly code!).