栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++多态的基本概念

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++多态的基本概念

多态是c++面向对象三大特性之一(封装、继承、多态)
分为静态多态和动态多态
静态多态:函数重载和运算符重载就属于静态多态,重用函数名
动态多态:派生类和虚函数实现运行时的多态
区别:
静态多态函数地址早绑定,在编译阶段就确定
动态多态函数地址晚绑定,在运行阶段才确定
利用代码实现如下:

#include 
using namespace std;

class Animal
{
    public:

   virtual void speak() //动态多态的使用条件:1、要有继承关系,
       //子类要重写父类的虚函数,注意是重写不是重载,需要返回值类型、函数名、参数列表完全一致!
    {
        cout<<"动物在说话 !"< 

 剖析一下原理!!!!!!!!!!!!!!!
当我没用虚函数的时候,Animal类的大小是1,用了之后是8,本质上是函数结构发生了改变,
多了一个vfptr,(虚函数(表)指针),指向的是一个vftable(虚函数表),表里存放的是Animal类的speak函数的地址,(&Animal::speak)
当子类继承父类时,也会继承这一切,如果子类重写了父类的虚函数,那么虚函数表里的子类的speak函数地址将覆盖父类的speak函数地址
此时就实现了用父类的指针或引用去指向子类对象,调用的就是子类的speak函数了

此处的原理如果大家还不清楚建议去看看黑马讲的,很清楚,图我放着了:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/892376.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号