翻了下C++笔记,未必正确,仅供参考,希望能帮到你。
虚函数的原理,可以这么理解:在java中,子类中的函数如果没有重载的话,默认会调用父类的方法,如果声明了虚函数,则不调用父类方法。
虚函数的定义机制:在C++中,使用关键字virtual声明函数为虚函数。当类中定义有虚函数时,编译器会将该类中所有虚函数的首地址保存在一张地址表中,
这张表被称为虚函数地址表,简称虚表。同时,编译器还会在类中添加一个隐藏数据成员,称为虚表指针。该指针中保存着虚表的首地址,用于记录和查找虚函数。
至于纯虚函数,它和虚函数没多大关系,可以理解为不能实例化的类,至于这么做的作用,一般认为有两个:
1.为了安全.因为避免任何需要明确但是因为不小心而导致的未知的结果. 提醒子类去做应做的实现.
2.为了效率,不是程序执行的效率,而是为了编码的效率.virtual=0;
纯虚函数的定义机制:virtual=0;
|