<示例>
#include <iostream>
using namespace std;
class Base
{
public:
virtual void who()
{
cout << "I am Base\n";
}
};
class Derived: public Base
{
public:
void who()
{
cout << "I am Derived\n";
}
};
int main()
{
// note here virtual function who() is called through
// object of the class (it will be resolved at compile
// time) so it can be inlined.
Base b;
b.who();
// Here virtual function is called through pointer,
// so it cannot be inlined
Base *ptr = new Derived();
ptr->who();
return 0;
}
虚函数用于运行时多态或晚绑定或动态绑定,内联函数用于提高程序的效率,内联函数的思想:无论内联函数什么时间被调用,在编译时,内联函数的代码段都可以在被替换或插入,当一些小函数在程序中被频繁使用和调用时,内联函数变得十分有用。类内部定义的所有函数(虚函数除外)都被隐式或自动认为是内联的。
使用类的引用或指针调用虚函数时,无论虚函数什么时间被调用,它都不能是内联的(因为虚函数的调用在运行时确定);但是,使用类的对象调用虚函数时,无论虚函数什么时间被调用,它都可以是内联的(因为在编译时编译器知道对象的确定类型)。