C++的多态

面试中每次问到这个东西,我都说的很不好,感觉还是把它重新整理一下吧。

       多态:是c++oop思想的三大特性之一。可提高代码的复用,和对功能的扩展。实现了,当一个函数被不同的对象调用时,能产生不同的效果或行为。c++的多态分为静多态和动多态,静多态是编译时的多态,即在编译时确定调用的是哪个函数,如模板、重载;动多态是运行时的多态,只有在运行的时候才能知道调用的是哪个函数,它是基于继承和虚函数来实现的。

具体说一下动多态:

      当一个类中存在虚函数时,这个类中就会有一个虚函数指针指向一个保存了虚函数的虚函数表。子类继承父类时,会直接拷贝一份父类的虚函数表,如果子类不去改写父类的虚函数时,子类的虚函数表中的虚函数就是父类的虚函数,但当子类自己写了同名的函数,则子类自己的虚函数就会覆盖虚函数表中同名的父类虚函数,变成自己的虚函数。

       另外,要定义为虚函数必须要有以下的两个条件:对象和地址。只有有了对象才会有虚函数指针,有了地址才能向虚函数表中存放。

       基于这两个条件:和构造函数不可以定义为虚函数,因为构造函数结束后才会有对象;而析构函数可以,同时也建议将有继承关系的父类的析构函数定义为虚函数,原因为:如果不定义为虚函数,那么当一个父类的指针指向子类的对象时,在进行析构时,指针会直接调用父类的析构函数,而子类的对象是没有被析构的,所以把父类的析构函数定义为虚函数,就可以在父类指针指向子类对象时,能成功调用子类自己的函数析构掉子类对象。

       

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值