当前位置: 首页 > 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++类和对象》

相关文章:

  • 从零到一:C语言基础入门学习路线与核心知识点全解析
  • Redis的GEO详解
  • 82.多级抽取滤波器,设计抗混叠滤波器时采样频率是基于抽取之前的设计的
  • Lua基础复习之Lua元表
  • C++——基础知识
  • 论文笔记 <交通灯> IntelliLight:一种用于智能交通灯控制的强化学习方法
  • RISC-V向量扩展与GPU协处理:开源加速器设计新范式——对比NVDLA与香山架构的指令集融合方案
  • Greenplum 与 PostgreSQL 的关系
  • 005微信小程序npm包_全局数据共享和分包
  • # 我使用过的 HTML + CSS 实践总结笔记(含说明)
  • 密度泛函涨落理论在医疗人工智能中的应用与展望:多尺度物理驱动智能的新范式
  • 【Vue】Vue2/3全局属性配置全攻略
  • 实验分享|自研局部DIC-GPU算法与开源GPU算法对比实验
  • SpringBoot-Actuator依赖项的作用配置 Heapdump堆栈信息泄露
  • 微信小程序:将搜索框和表格封装成组件,页面调用组件
  • springboot项目,利用docker打包部署
  • 简说 python
  • python题库及试卷管理系统
  • java循环语句-跳转关键字break、continue
  • 企业软件架构演进:从流程驱动到知识驱动的数字化转型路径
  • 优惠券网站怎么做代理/怎样制作网页新手自学入门
  • 网站高端设计/河南郑州网站顾问
  • 网站建设服务价格/市场推广方案
  • 龙岗住房和建设局网站/平台宣传推广方案
  • ssm框架做音乐网站/上海知名seo公司
  • 甜点网站里的新闻资讯怎么做/谷歌seo查询