笑看天下无敌手 发表于 2025-1-11 10:51:11

【C++】多态

多态

        C++实现多态的前提条件,存在继承关系,子类重写父类虚函数,并且父类指针调用子类重写的虚函数;
        静态多态(编译时多态):函数重载(运算符重载),编译时可以确定的多态。
        动态多态:通过指针或引用调用子类重写的虚函数,在程序运行期间才气确定具体调用哪一  函数个虚函数。
        函数隐藏:子类中函数名和父类中函数名类似,子类对应函数会屏蔽父类同名函数。
        函数的覆盖发生在基类和子类中,并且两个函数完全类似(且为虚函数),否则为函数隐藏
C++多态的实现

        
虚表指针与虚函数

   

[*]每个包含虚函数的类都有效来存放指针的数组(虚表),其中每一个元素对应该类的一个虚函数
[*]含虚函数类中的虚表,而非对象全部,一个类全部对象共用一个虚表,如果一个子类继承父类,父类若有虚函数,子类可调用父类的虚函数,子类也会有虚表。
[*]虚函数指针的赋值发生在编译器的编译阶段,在编译阶段虚表就构造出来了。
[*]为了让每个包含虚表的类对象都拥有一个虚表指针,编译器在类中填简历一个指针*_vptr
用来指向虚表。这样,当类的对象在创建时便拥有了这个指针,且这个只针对值会自动被设置为指向该类的虚表
动态绑定

静态类型和动态类型

静态绑定和动态绑定

虚析构

纯虚函数与抽象类


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【C++】多态