BENCHMARK:
http://unthought.net/c++/c_vs_c++.html
http://synflood.at/blog/index.php?/archives/732-Performance-of-C-vs.-C++.html
RUNTIME:
http://en.wikipedia.org/wiki/C%2B%2B
See: Dynamic polymorphism
http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fcplr315.htm
http://en.allexperts.com/q/C-1040/Difference-Overriding-Overloading.htm
http://www.codeproject.com/Questions/141657/run-time-polymorphism-VS-compile-time-polymorphism
<< Now, a short answer on "What is 'that' resolved at runtime ? (overriding)".
After some thinking: overriding itself is done during compile time as well: a virtual function in two different classes (relative throw inheritance) is called indirectly, through Virtual Method Table (VMT).
A caller may work with a variable which is known during compile time as a variable of some parent class, but during run time the actual class instance is one of derived class (which is fine due to inheritance). If not VMT (not virtual function), the called method would be the one of the compile-time class, but due to VMT a virtual method called during run-time will be the one of actual run-time reference.
So, while all the methods (virtual or not) are known during compile time, which exactly is called are known only run-time -- late binding. For a final note: planning object-oriented classes needs understanding and planning. Formally making methods virtual per se may introduce no late binding or polymorphism. Again, I recommend reading; see the references below. >>
==============================
Generally speaking, higher level languages (and C++ is "higher" than C), take a language near to our "natural" / human understanding. But if a language is "better" (easier or more "expressive") for humans, it takes "more time" to be resolved in a "machine way".
You must think that only machine code is the fastest language. So every language higher than machine code (not Assembler, but pure machine code) involve more "code" to be "resolved". Sometimes this process can be related to code-size. A program in machine code is smaller than the same C code, and C code is smaller than C++, which is smaller than Pascal, etc...
Obviously, this is a GENERAL discussion since, as you said, we need to consider compiler efficiency, intermediate code optimizations, programmer skills (you can write good code to work with a language), etc...
This discussion is a never-ending discussions (you can find a ton of these over the web).
As I said, I don't want to arise a flame, and I don't want to say a language is BETTER than another one (some people manage programming languages like a religion!).
--Alessandro