一、基础虚函数表和虚函数在c++中的存储位置
https://blog.csdn.net/u010029439/article/details/120799411
二、c对齐原则和有虚函数表的长度对齐
c对齐原则和有虚函数表的长度对齐_u010029439的博客-CSDN博客
三、虚函数表-C++虚函数表基础(多态的实现原理)
https://blog.csdn.net/u010029439/article/details/120799974
四、虚函数表、变量与继承
五、覆盖和虚函数表
C++ 虚函数表解析_u010029439的博客-CSDN博客
六:虚函数缺陷:
1)虚函数的缺陷-通过虚函数表访问私有虚函数
C++ 虚函数表解析_u010029439的博客-CSDN博客
2)C++虚函数的缺点-额外的内存开销
https://blog.csdn.net/u010029439/article/details/120802812
3)C++虚函数的缺陷-内存开销和其他语言的解决办法
https://blog.csdn.net/u010029439/article/details/120802858
4)虚函数的缺陷-子类可以继承父类的私有虚函数但是只能访问父类的public变量
子类可以继承父类的私有虚函数但是只能访问父类的public变量_u010029439的博客-CSDN博客
5)虚函数的缺陷-private只能限制当前类,父类的私有虚函数可以被子类访问
虚函数的缺陷-private只能限制当前类,父类的私有虚函数可以被子类访问_u010029439的博客-CSDN博客
子类可以继承父类的私有虚函数-因为只是方法不是变量
子类
class WeatherBase
{
private:
virtual void init();
}
class Rain : public WeatherBase
{
private:
virtual void init();
}
一个成员函数被定义为private属性,标志着其只能被当前类的其他成员函数(或友元函数)所访问。而virtual修饰符则强调父类的成员函数可以在子类中被重写,因为重写之时并没有与父类发生任何的调用关系,故而重写是被允许的。
编译器不检查虚函数的各类属性。被virtual修饰的成员函数,不论他们是private、protect或是public的,都会被统一的放置到虚函数表中。对父类进行派生时,子类会继承到拥有相同偏移地址的虚函数表(相同偏移地址指,各虚函数相对于VPTR指针的偏移),则子类就会被允许对这些虚函数进行重载。且重载时可以给重载函数定义新的属性,例如public,其只标志着该重载函数在该子类中的访问属性为public,和父类的private属性没有任何关系!
————————————————
版权声明:本文为CSDN博主「Peakin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014587123/article/details/80457383