多态总结

news2024/11/24 17:29:22

什么是多态?

所谓多态,就是同一个操作,作用在了不同的对象上,就会有不同的解释,进而产生不同的执行结果。使用时,是采用父类指针指向子类对象的方法。其中,重载和重写是常见的实现多态的手段。

什么是重载、重写(覆盖)、重定义(隐藏)?

  • 重载就是函数名相同,参数不同,两个函数在同一作用域
  • 重写:两个函数分别在子类和父类中,函数名,返回值,参数均相同,函数必须为虚函数
  • 重定义也叫隐藏,指的是在继承关系中,子类实现了一个和父类名字一样的函数,(只关注函数名,和参数与返回值无关)这样的话子类的函数就把父类的同名函数隐藏了。隐藏只与函数名有关,与参数没有关系.

多态的实现原理?

虚函数是类的成员函数,存在存储虚函数指针的表叫虚函数表,虚函数表是一个存储类成员函数指针的数据结构,在编译时由编译器自动产生,virtual成员函数会被编译器放入虚函数表中,当存在虚函数时,每个对象中都有一个指向虚函数的指针,每个指针都指向调用它的地方,当子类调用虚函数时,就会去虚表里面找自己对应的函数指针,从而实现谁调用,实现谁,从而实现多态。

inline函数可以是虚函数吗?

不能,因为inline函数没有地址,无法把地址放到虚函数表中。

静态成员可以是虚函数吗

不能,因为静态成员函数没有this指针,使用类型::成员函数的调用方式无法访问虚函数表,所以静态成员函数无法放进虚函数表。

构造函数可以是虚函数吗?

不能,因为对象中的虚函数表指针是在构造函数初始化列表阶段才初始化的。

析构函数可以是虚函数吗?什么场景下析构函数是虚函数

可以,并且最好把基类的析构函数定义成虚函数。因为析构函数在汇编时会将所有的析构函数转化为Destructed,调用谁,析构谁,若析构函数不是虚函数,可能存在在子类析构时,继承的父类没有析构,产生内存泄露,所以建议都写成虚函数。

对象访问普通函数快还是虚函数更快

首先如果是普通对象,是一样快的。如果是指针对象或者是引用对象,则调用的普通函数快,因为构成多态,运行时调用虚函数需要到虚函数表中去查找。

虚函数表是在什么阶段生成的,存在哪的

虚函数表是在编译阶段就生成的,vs一般情况下存在代码段(常量区)的。

C++菱形继承的问题?虚继承的原理?

菱形继承:一个子类,继承两个父类,容易导致二义性,调用不明确,比如下图,student,和teacher都继承了person,,而他两又都被assistant继承,如果调用person的函数,就不知道从哪里调上去的,产生二义性。且存了两份person,造成数据冗余。

虚继承的原理:通过虚基表存了三者共有的指针存了一份,所以虚继承以后,只会初选一份。

 什么是抽象类?抽象类的作用

类中所有成员均为虚函数,虚函数不能实例化,抽象类强制重写了虚函数,另外抽象类体现出了接口继承关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/849952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】基础知识(一)

MySQL基础知识(一) 文章目录 MySQL基础知识(一)00 MySQL安装01 数据库介绍1.1 什么是数据库1.2数据库分类 02 SQL分类03 数据库操作3.1显示数据库3.2创建数据库3.3选中数据库3.4删除数据库 04 常用数据类型4.1数值类型4.2字符串类…

LeetCode 0024. 两两交换链表中的节点:粗暴易懂的方法(几个临时变量)

【LetMeFly】24.两两交换链表中的节点:粗暴易懂的方法(几个临时变量) 力扣题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/ 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点…

安路FPGA的赋值报错——移位处理,加括号

authordaisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 在使用移位符号用来当作除以号使用时,发现如下问题 其中 cnt_8K 为偶数和奇数时输出的数据不一样 reg [10:0] cnt_8K; reg [10:0] ram1_addra; always(posedge clk_16M) begin if(ram_out_flag )begin if(…

2023年新手如何学剪辑视频 想学视频剪辑如何入门

随着短视频、vlog等媒体形式的兴起,视频剪辑已经成为了热门技能。甚至有人说,不会修图可以,但不能不会剪视频。实际上,随着各种智能软件的发展,视频剪辑已经变得越来越简单。接下来,一起来看看新手如何学剪…

重磅来袭!Android UI设计规范助你打造精美Android应用!

重磅来袭!Android UI设计规范助你打造精美Android应用! 为了规范Android UI设计,Google官方推出UI设计指南助你打造精美的Android应用。 使用 Android 主题和组件创建应用设计。利用 Android 独特的设计模式和产品打造精美、易用的现代应用…

nginx之location匹配的规则和优先级,以及rewrite

主要内容:一、location匹配的规则和优先级(重点,面试会问,工作用得到) 二、nginx常用的问题(要求掌握) 三、rewrite:重定向功能(有掌握,有理解)…

DNS:使用 bind9 配置主从权威DNS服务器

写在前面 分享一些 使用 bind9 配置主从权威名称服务器的笔记理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式…

设计模式行为型——策略模式

在现实生活中常常遇到达成某种目的,有多种实现策略可供选择的情况。例如,出行上班可以乘坐公交车、乘坐地铁、骑自行车或自己开私家车等,填饱肚子可以吃火锅、吃烤肉、吃烤串、吃东北家常菜等方法。 在软件开发中也常常遇到类似的情况&#x…

人物启示-张一鸣与陆奇

在科技行业中,张一鸣与陆奇可谓是两位颇具影响力的人物。张一鸣和陆奇分别是字节跳动(TikTok 的母公司)的创始人和百度前总裁。张一鸣作为字节跳动的创始人,成功打造了今日头条、抖音等知名产品,而陆奇则曾任微软副总裁…

计算机组成与设计01:计算机的抽象与技术

目录 1 概述 1.1 计算机体系结构体中的8个伟大思想 1.2 计算机层次结构 1.2.1 概述 1.2.2 指令集体系结构 1.3 实例:从程序到电子信号 1.3.1 从高级语言到汇编语言 1.3.2 从汇编语言到机器语言 1.3.3 生成可执行文件并执行 1.3.4 计算机基本执行结构 1.3…

【vue3】基础知识点-computed和watch

学习vue3,都会从基础知识点学起。了解setup函数,ref,recative,watch、computed、pinia等如何使用 今天说vue3组合式api,computed和watch 在vue3中,computed和watch仍然是非常有用的特性,帮助处…

【C语言】实现linux下基于C语言的一个简单的UDP客/服端通信

一、实例代码 对于基础好的朋友可以直接拿代码看 客户端代码&#xff1a; #include <stdio.h> #include <sys/socket.h>//socket() #include <netinet/in.h>//struct sockaddr_in #include <string.h>//memset() #include <arpa/inet.h>//ine…

数字化转型中的抉择:定制化软件还是引入PDM系统?

企业在数字化转型过程中可以考虑是使用定制化软件、基于成熟模块改造&#xff0c;或引入PDM&#xff08;产品数据管理&#xff09;系统&#xff0c;这时需要仔细权衡各种因素&#xff0c;以确保选择最适合其需求的路径。这些选择各自有其优势和适用场景&#xff0c;下面将分别对…

Linux项目部署

目录 一JAVAWeb环境的部署【安装JDK&#xff0c;MySQL数据库&#xff0c;Tomcat】 二.手工部署SpringBoot项目&#xff08;写的最好的&#xff09; 1.在IDEA中开发SpringBoot项目并打成jar包--点击右侧的Maven执行package命令 2.将jar包上传到Linux服务器 3.执行以下命令&a…

探究Spring事务:了解失效场景及应对策略

在现代软件开发中&#xff0c;数据的一致性和完整性是至关重要的。为了保证这些特性&#xff0c;Spring框架提供了强大的事务管理机制&#xff0c;让开发者能够更加自信地处理数据库操作。然而&#xff0c;事务并非银弹&#xff0c;存在一些失效的情景&#xff0c;本文将带您深…

C++ Visual Studio工程目录相对路径设置

文章目录 相对路径相对路径是相对vs工程的哪个目录而言书写格式 参考 相对路径 要设对相对路径&#xff0c;需要搞清楚下面两个问题&#xff1a; 相对路径是相对vs工程的哪个目录而言相对路径的书写格式 相对路径是相对vs工程的哪个目录而言 注意&#xff1a; 并非以解决方案…

LeetCode150道面试经典题-买卖股票的最佳时机(简单)

1、题目 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的…

麻了!包含中科院TOP,共16本期刊被标记为“On Hold”状态!

近日&#xff0c;小编从科睿唯安旗下的“Master Journal List”官网查到&#xff0c;除了知名老牌期刊Chemosphere竟然被标记为“On Hold”状态&#xff0c;目前共有7本SCI期刊&#xff0c;1本SSCI期刊&#xff0c;8本ESCI期刊被标记为“On Hold”&#xff0c;究竟是怎么回事呢…

一篇Android 真实面经(干货满满)

如梦朦胧 从年初开始就一直有换工作的躁动&#xff0c;因某些原因而拖到了现在,然后投了某度的Android岗位,本以为像我这种非211、985没工作经验的渣渣只能被直接pass,结果却意外的收到了电话,真是受宠若惊.经过电面,技术三面,然后就是等通知到最后拿到了OFFER,如梦一般,真是挺…

python小程序代码50 到100行,python小程序代码100行

这篇文章主要介绍了python小程序代码50 到100行&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 目录 1.生成漂亮的樱花树2.绝美的静态樱花树3.魔法少女小圆动漫形象4.利用pyth…