C++中动态多态要靠虚函数来实现,下面我们来详细的说一下虚函数的机制
虚函数表
C++中的虚函数是通过一张虚函数表中实现的,在虚函数表中存储着每个虚函数的地址。那么编译器是怎么访问虚函数表的呢,下面我们看这样一段代码
class Shape{
public:
void getArea() {
cout<<"Shape"<<endl;
}
};
int main()
{
Shape sss;
cout<<sizeof(sss)<<endl;
}
这段代码的程序结果为:
可以看到当上述的类中没有虚函数,那么如果我们加上虚函数声明:
class Shape{
public:
virtual void getArea() {
//虚函数
cout<<"Shape"<<endl;
}
};
我们会发现加上关键字后类变大了,这是因为加上virtual关键字之后编译器会自动的在类的开头加上一个指针,这个指针指向这个类的虚函数表。
当我们声明一个继承Shape类的类时:
class Squar