当前位置: 首页 > news >正文

c++学习-多态

1.概述

多态作用:相同接口(函数名)表现出不同行为。解耦合,调用者不关心接口实现细节,只关注抽象基类提供什么接口。不同电视的开机逻辑不一样,但是只要都提供了开机控制按键(指定函数接口),外部使用者都可以点击开机键打开不同电视(调用统计函数接口实现不同功能)

基本概念

2.使用流程

通过虚函数实现多态:

类中有虚函数时,编译器会自动生成一个虚函数表指针,调用虚函数时会动态选择实际执行到函数

#include <iostream>using namespace std;class Animal
{
public:virtual void speak(){cout << "Animal speaks" << endl;}
};class Cat : public Animal
{
public:void speak() {cout << "Cat speaks" << endl;}
};class Dog : public Animal
{
public:void speak() {cout << "Dog speaks" << endl;}
};void testSpeak(Animal& animal) {animal.speak();
}void test() {Cat cat;testSpeak(cat); // Animal speaksDog dog;testSpeak(dog); // Animal speaks
}void testSize() {std::cout << "Size of Animal: " << sizeof(Animal) << std::endl;
}int main() {test();testSize();return 0;
}

3.问题

1.为什么父类指针指向子类可以找到并调用子类函数,内存模型原理是什么

子类重写父类虚函数,子类中虚函数表记录函数信息会换成子类的

2.为什么值传递不会触发多态

值传递复制子类对象时会发生切片,只会复制子类对象中的父类成员变量,因此不会复制子类中的虚函数表指针。

3.静态成员函数可以是虚函数吗

不可以,虚函数映射表指针本质也是普通类成员变量,使用时需要通过this指针

4.总结

1.声明虚函数以后类中会自动生成一个指针类成员变量,指向虚函数表。

2.

3.

思维导图链接:https://www.yuque.com/fengdeshengyin-dssub/gefhac/iolihgpsdgvez4ob?singleDoc# 《c++类和对象》

http://www.lryc.cn/news/571401.html

相关文章:

  • MacOS上MySQL的安装以及使用
  • 【编译工具】CodeRider 2.0:驭码 CodeRider 2.0 产品功能分析
  • 【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(软件篇)(二)
  • RK 安卓10/11平台 HDMI-IN 调试
  • RAG轻松通-P1:分块
  • 爬虫技术:数据获取的利器与伦理边界
  • 输电线路电缆护层环流在线监测装置:原理、优势与应用解析
  • Elasticsearch/OpenSearch MCP Quickstart
  • 日本生活:日语语言学校-日语作文-沟通无国界(2):回忆深刻的生日
  • threejs webVR获取相机正前方向量
  • 【保姆级】讯飞ROS智能车 Debian系统 U盘克隆/恢复教程
  • Spring Boot启动流程深度解析(源码级剖析)
  • 键盘动作可视化技术浅析:如何做到低延迟显示
  • word如何插入高清晰的matlab绘图
  • 【数据分析三:Data Storage】数据存储
  • Kafka数据写入流程源码深度剖析(Broker篇)
  • Python训练营打卡Day50
  • Linux网络配置工具ifconfig与ip命令的全面对比
  • 游戏技能编辑器之状态机的设计与实现
  • 攻防世界[level7]-Web_php_wrong_nginx_config
  • 一次生产故障引发的JVM垃圾回收器选型思考:彻底掌握垃圾回收原理及通用配置!
  • 在 Java 中操作 Map时,高效遍历和安全删除数据
  • Arrays.asList() 的不可变陷阱:问题、原理与解决方案
  • FPGA 43 ,UDP 协议详细解析( FPGA 中的 UDP 协议 )
  • 升级OpenSSL和OpenSSH 修复漏洞
  • 多组件 flask 项目
  • 数据库新选择?KingbaseES在线体验详解
  • Patch Position Embedding (PPE) 在医疗 AI 中的应用编程分析
  • 工业 AI Agent:智能化转型的核心驱动力
  • 计算机网络学习笔记:TCP流控、拥塞控制