虚函数的缺陷-子类可以继承父类的私有虚函数但是只能访问父类的public变量

一、基础虚函数表和虚函数在c++中的存储位置

https://blog.csdn.net/u010029439/article/details/120799411


二、c对齐原则和有虚函数表的长度对齐

c对齐原则和有虚函数表的长度对齐_u010029439的博客-CSDN博客


三、虚函数表-C++虚函数表基础(多态的实现原理)

https://blog.csdn.net/u010029439/article/details/120799974


四、虚函数表、变量与继承

虚函数表详解_u010029439的博客-CSDN博客


五、覆盖和虚函数表

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值