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函数了

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

c++多态的基本概念_第1张图片

 

你可能感兴趣的:(C++黑马b站课程笔记加体会,c++,开发语言)