C++ takes a hit on virtual functions. But it is not a disadvantage of the language, as you will get similar performance hits if you emulate virtual functions using function pointers in C.
C++ has a lot of features that can make very complex code very fast. For example, templates. C++ could also be much faster in a lot of cases as the compiler knows more about your data types, reducing the probability of pointer aliasing.
Besides this, there is very little performance difference between the languages.
From Wikipedia:
In C, any function pointer argument may alias any other function pointer argument. The compiler must assume that any accesses through these pointers can alias. This dramatically restricts the potential for optimization.
In C++, pointer arguments are assumed not to alias if they point to fundamentally different types. This allows more optimizations to be done than in C.
These aliasing optimizations may lead to big performance gains in c++ code. To get the same performance in c would require judicious use of the restrict keyword.
-Debdatta Basu.