虚函数这里说的有些乱,因为 C++ 写法奇葩略多。其实可以简单理解。
虚函数可以不实现(定义)。不实现(定义)的虚函数是纯虚函数。
在一个类中如果存在未定义的虚函数,那么不能直接使用该类的实例,可以理解因为未定义 virtual 函数,其类是抽象的,无法实例化。将报错误:
undefined reference to `vtable for xxx'
这和其它语言的抽象类,抽象方法是类似的——我们必须实现抽象类,否则无法实例化。(virtual 和 abstract还是有些区别的)
也就是说,如果存在以下代码:
usingnamespace std;
classBase{
public:
virtualvoid tall();
};
classPeople:Base{
public:
void tall(){
cout <<"people"<< endl;
};
};
那么,在 main 方法中,我们不能使用 Base base; 这行代码,此时的 tall 没有实现,函数表(vtable)的引用是未定义的,故而无法执行。但我们可以使用 People people; 然后 people.tall(); 或 (&people)->tall(); 因为People实现或者说重写、覆盖了 Base 的纯虚方法 tall(),使其在 People 类中有了定义,函数表挂上去了,于是可以诞生实例了。
int main(){
// Base base;//不可用
People people;//可用
people.tall();
(&people)->tall();
return0;
}
上述的是针对虚函数而言,普通的函数,即使我们只声明,不定义,也不会产生上述不可用的问题。