首页 > 编程语言 >c++ 多态整理笔记

c++ 多态整理笔记

时间:2024-06-02 14:33:00浏览次数:57  
标签:调用 函数 实现 基类 多态 笔记 c++ 派生类 重写

在C++中,多态性(polymorphism)是一种面向对象编程的特性,允许不同的对象通过相同的接口调用不同的实现。多态性主要通过虚函数来实现,使得基类的指针或引用可以指向派生类的对象,并调用派生类的重写函数。

实现多态性的关键步骤

  1. 声明虚函数:在基类中声明虚函数。
  2. 重写虚函数:在派生类中重写虚函数。
  3. 使用基类指针或引用:通过基类指针或引用调用虚函数。

虚函数基类可以实现也可以不实现?

是的,基类中的虚函数可以选择实现,也可以不实现。在基类中声明虚函数但不提供实现,这种情况下,基类就成为一个抽象类,不能实例化。相反,如果基类提供了虚函数的实现,那么派生类可以选择使用基类的实现,或者重写虚函数。

#include <iostream>
using namespace std;

// 基类
class Base {
public:
    // 声明虚函数
    virtual void show() {
        cout << "Base class implementation of show()" << endl;
    }

    // 虚析构函数,以便正确删除派生类对象
    virtual ~Base() {}
};

// 派生类
class Derived : public Base {
public:
    // 重写虚函数
    void show() override {
        cout << "Derived class implementation of show()" << endl;
    }
};

int main() {
    Base* b1 = new Base();
    Base* b2 = new Derived();

    // 调用虚函数
    b1->show(); // 调用基类的实现
    b2->show(); // 调用派生类的实现

    // 释放内存
    delete b1;
    delete b2;

    return 0;
}

标签:调用,函数,实现,基类,多态,笔记,c++,派生类,重写
From: https://blog.csdn.net/jacke121/article/details/139286664

相关文章

  • C++课程设计实验杭州电子科技大学ACM题目(下)
    题目七:2060.Snooker题目描述ProblemDescription:background:PhiliplikestoplaytheQQgameofSnookerwhenhewantsarelax,thoughhewasjustalittlevegetable-bird.Maybeyouhadn'tplayedthatgameyet,nomatter,I'llintroducetheruleforyo......
  • 机器学习笔记(1): 梯度下降算法
    本文作为我看过#吴恩达机器学习系列课程的产物,并不适用于一无所知的学习者。在机器学习中,有三个很重要的函数:\(h_\theta(x)\)表示预测数据\(J(\theta)\)代价函数,表示预测和实际的差距,\(J(\theta)\ge0\),且\(J(\theta)\)值越小,差距越小。\(\frac{\delta}{\delta\t......
  • STMF4立创天空星相关学习笔记 USART
    #本文有参考官方文档,连接就放在最后了,大家可以去看看,写的比较好,同时在此声明,本系列笔记是用来,记录学习过程中产生的问题,以及查询结果逐渐理解的过程。#USART    笔者理解:一种常用的通信方式,分为:同步通信、异步通信,两种二者差别在于,连接双方是不是有着相同的时钟频率,......
  • 立创天空星STMF4学习笔记,USART RS232 RS485相关理解
    为了写,这一篇文章笔者,参考了一些视频,文档,地址放最后,大家可以去看看。#USART为什么只能进行短距离通信,一般只在1M之内进行同行#USART单片机最为常用的一种通信方式之一,一般用于点对点通信,不能进行一主多从,进行相关通信,相关电平取值范围如下。        高电平......
  • FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
    ​《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKit。ZLMedia......
  • 算法学习笔记——二分搜索
    二分搜索在有序数组中确定num存在还是不存在:当arr[m]==num,则num存在当arr[m]>num,则r=m-1,缩小r的范围,继续往左二分当arr[m]<num,则l=m+1,缩小l的范围,继续往右二分//保证arr有序,才能用这个方法publicstaticboolenexist(int[]arr,intnum){if(ar......
  • Large Language Models are Zero-Shot Rankers for Recommender Systems论文阅读笔记
    LargeLanguageModelsareZero-ShotRankersforRecommenderSystems论文阅读笔记Abstract​ 本工作旨在调查作为推荐系统的排名模型的LLM的能力。我们首先将推荐问题形式化为一个条件排序任务,将顺序交互历史作为条件,并将其他候选生成模型检索到的项目作为候选项。为了解决LL......
  • C++实现自定义容器类型的范围循环
    先看一下类的设计与实现:classMyStack{public:MyStack()=default;MyStack(int*p,size_tlen):d(p),size(len){}int*begin(){returnd;}int*end(){return&d[size];}private:int*d=nullptr;size_tsize......
  • 3DS MAX备忘笔记(命令-面和元素)
    面层级轮廓(2d):缩放轮廓不改变边之间的关系插入(2d):复制已有轮廓并放缩,且连接对应的点(插入的距离均匀,直接放缩面距离不均匀)挤出(3d):可选挤出方向、挤出后面之间是否还连接 倒角(3d): 挤出+插入(二维面上自动等距边界放缩),(直接缩放挤出的面不等距)桥:l 直接多选面,点桥:元素间—......
  • 3DS MAX备忘笔记(命令-选择命令)
    选择命令循环:l 双击边使用,选择首尾相接的一圈边。l 选择某面+按ctrl双击旁边的面使用。l 无法选择多边面的一圈边l 点循环的边:均匀间隔选择。选择某边+按下点循环l 点循环的面:=点循环边+按下ctrl时转面层级(面层级不能直接点循环)环形:l 选择平行的一圈边。选择......