C++多态实现原理

多态:当不同的对象去完成同一件事时会产生出不同的状态。

多态分为静态多态和动态多态,这里讲的是动态多态。

即动态多态的函数地址晚绑定,运行阶段确定函数地址。

多态示例:

#include<iostream>

//动态多态满足条件 
//1、有继承关系
//2、子类重写父类的虚函数

//动态多态的使用
//父类的指针或者引用 指向子类对象
//Animal &animal =cat



//*原理

using namespace std;

class Animal
{
public:
    virtual void speak(){
        cout<<"动物在说话"<<endl;
    }
};

class Cat:public Animal
{
    void speak(){
        cout<<"小猫在说话"<<endl;
    }
};

class Dog:public Animal
{
    void speak(){
        cout<<"小狗在说话"<<endl;
    }
};


void dospeak(Animal &animal){
    animal.speak();
}

void test01(){
    Cat cat;
    Dog dog;
    dospeak(cat);
    dospeak(dog);
}


int main(){

    test01();
    return 0;
}

  

多态原理:

由于用了虚函数,使得类的内部发生了改变,多了一个虚函数指针

vfptr 即 virtual function pointer 虚函数指针(指针四个字节)

 

虚函数指针指向虚函数表vftable  表内部记录虚函数的地址

当子类没有重写虚函数时,子类把父类继承,vftable中记录的是还是父类的函数

 

 当子类重写父类的虚函数,子类中的虚函数表内部会替换成 子类的虚函数地址

当父类的指针或者引用指向子类对象的时候,发生多态

多态作为C++面向对象三大特性之一

多态的优点:

代码组织结构清晰

可读性强

利于前期和后期的扩展以及维护,如果想扩展新的功能,不需要修改源码。

在真实开发中,对扩展进行开放,对修改进行关闭


参考:黑马程序员和C++ primer

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值