多态的实现

多态的实现

  • 定义:由继承加虚函数实现

  • 分类:
    - 静态多态(重载):在编译时期就决定调用的函数,根据参数列表来决定。
    - 动态多态(子类重写父类的虚函数来实现)在运行期间决定

  • 虚函数相关:

    • 类中含有虚函数时,编译器会为该类生成一个虚函数表,保存该类的虚函数地址
    • 派生类继承基类时,编译器也会为派生类生成自己的虚函数表
    • 当有一个基类指针指向派生类,当调用虚函数时,会调用该派生类重写的虚函数;也就是可以调用派生类虚函数表中的虚函数以实现多态。

例如:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <iostream>
using namespace std;



class  Base
{
public:
    void  virtual  Func()
    {
        cout << "Base\n";
    }
};

class  Derived : public  Base
{
public:
    void  Func()
    {
        cout << "Derived\n";
    }

    void  NewFunc()
    {
        cout << "New func\n";
    }
};
//父类指针1.虚函数使用:是根据实力的对象类型选择调用的函数     2.指针强转
void main()
{



    /*  Derived* a = new Derived;
      a->Func();*/



    Base* b = new  Derived();
    b->Func();

    //安全转换
    Derived* d = dynamic_cast <Derived*>(b);
    if (d != NULL)
    {
        d->NewFunc();
    }

    return;
}

析构函数写成虚函数

  • 目的:降低内存泄漏的可能性
  • 若存在一个基类指向派生类的对象,使用完毕准备销毁时,若基类的析构函数未定义成虚函数时,编译器就会认为当前对象的类型是基类,仅执行基类的析构函数,派生类的内容无法析构,造成内存泄露。
posted @   ReTurn~~~~~~~  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示