多态总结

什么是多态?

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

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

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

多态的实现原理?

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

inline函数可以是虚函数吗?

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

静态成员可以是虚函数吗

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解机器学习与极大似然之间的联系

似然函数:事件A的发生含着有许多其它事件的发生。所以我就把这些其它事件发生的联合概率来作为事件A的概率,也就是似然函数。数据类型的不同(离散型和连续性)就有不同的似然函数 极大似然极大似然估计方法(Maximum Li…

sql server 删除指定字符串

replace方法 update #test set FIVCODEreplace(FIVCODE,440,) WHERE SOURCEFENTRYID140728

无数资深果粉称之为 Mac 装机必备软件的 ——CleanMyMac X

它就是被无数资深果粉称之为 Mac 装机必备软件的 ——CleanMyMac X。或许你没用过它,但是大概率你身边一定有它的资深用户,作为 MacPaw 旗下的老牌清理软件,在全球已经拥有超过 2500 万次的下载量。 它有着五大强悍的功能,可以帮…

浅谈智慧消防助力现代社会火灾防控

安科瑞 华楠 摘 要:随着我国经济水平的不断提高,科学技术取得了长足进步。科学技术的进步推动着社会不断前进,改变了各行各业的人们的生活。随着各种新型的技术尤其是人工智能技术的出现,社会进入了智能化时代。消防作为维护我们…

淘宝整店商品如何批量获取?获取淘宝店铺所有商品接口item_search_shop

在竞争日益激烈的电商行业,不少商家出于以下的考虑,想要实现一键批量获取淘宝店铺的所有商品。 竞争分析:通过获取某个店铺内的所有商品信息,可以对竞争对手的产品进行全面的了解和分析。可以了解到对手的产品种类、价格、销量等情…

【福建事业单位-资料分析】01 速算技巧-基期与现期

【福建事业单位-资料分析】01 速算技巧-基期与现期 一、速算技巧(基于选项的速算)1.1 计算类别——截位直除练习总结 二、速算技巧-比较类-分数比较2.1 一大一小(一大/一小)2.2 同大同小①分子分母都变大,保留两位直接…

LVS工作环境配置

一、LVS-DR工作模式配置 模拟环境如下: 1台客户机 1台LVS负载调度器 2台web服务器 1、环境部署 (1)LVS负载调度器 yum install -y ipvsadm # 在LVS负载调度器上进行环境安装 ifconfig ens33:200 192.168.134.200/24 # 配置LVS的VIP…

Idea配置Scala开发环境

1.首先安装scala插件: File--->Setting---->plugins,在输入框中输入scala,然后点击“Install”即可安装scala,需要稍微等待几分钟。 2 创建项目: File ---->new---->project-----Maven--->Next----输入名称(test…

力扣62.不同路径(动态规划)

/*** 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。* 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。* 问总共有多少条不同的路径? *…

Vue2源码分析-环境搭建

安装rollup 项目初始化 npm init -y安装pnpm npm i -g pnpm安装rollup以及相关插件 pnpm i rollup rollup/plugin-babel babel/core babel/preset-env --save-dev在根目录创建rollup.config.js文件,并且配置如下 import babel from "rollup/plugin-babel…

web前端之CSS操作

文章目录 一、CSS操作1.1 html元素的style属性1.2 元素节点的style属性1.3 cssText属性 二、事件2.1 事件处理程序2.1.1 html事件2.1.2 DOM0事件(适合单个事件)2.1.3 DOM2事件(适合多个事件) 2.2 事件之鼠标事件2.3 事件之Event事…

Dubbo+Zookeeper使用

说明:Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。 本文介绍Dubbo的简单使用及一些Dubbo功能特性,注册中心使用的是ZooKeeper,可在…

Idea小操作

Idea操作 idea提取内容构成一个方法 idea提取内容构成一个方法

【MATLAB第65期】基于LSTM长短期记忆网络的多输入单输出数据预测未来思路介绍(短期预测)

【MATLAB第65期】基于LSTM长短期记忆网络的多输入单输出数据预测未来思路介绍(短期预测) 往期第13期已实现多输入单输出滑动窗口回归预测 多输入单输出滑动窗口回归预测 往期第54期已实现多输入多输出滑动窗口回归预测 多输入多输出滑动窗口回归预测 一…

【uniapp 小程序开发语法篇】资源引入 | 语法介绍 | UTS 语法支持(链接格式)

博主:_LJaXi Or 東方幻想郷 专栏: uni-app | 小程序开发 开发工具:HBuilderX 小程序开发语法篇 引用组件easycom Js文件引入NPM支持 Css文件引入静态资源引入css 引入静态资源如何引入字体图标?css 引入字体图标示例nvue 引入字体…

jdk1.7与jdk1.8的HashMap区别2-底层原理区别

jdk1.7与jdk1.8的HashMap区别1-基本结构与属性对比_ycsdn10的博客-CSDN博客 一、代码区别 1.代码数:JDK1.7与JDK1.8相差了一倍的代码 2.方法数:JDK1.7是40个,JDK1.8是51个(只算基本方法) 二、Hash差别 1.JDK1.7 st…

一、 Mysql索引

一、 Mysql索引 001 Mysql如何实现的索引机制? MySQL中索引分三类:B树索引、Hash索引、全文索引 002 InnoDB索引与MyISAM索引实现的区别是什么? MyISAM的索引方式都是非聚簇的,与InnoDB包含1个聚簇索引是不同的。 在InnoDB存储引…

【云原生】详细学习Docker-Swarm部署搭建和基本使用

个人主页:征服bug-CSDN博客 kubernetes专栏:云原生_征服bug的博客-CSDN博客 目录 Docker-Swarm编排 1.概述 2.docker swarm优点 3.节点类型 4.服务和任务 5.路由网格 6.实践Docker swarm 1.概述 Docker Swarm 是 Docker 的集群管理工具。它将 Doc…

最小二乘问题和非线性优化

最小二乘问题和非线性优化 0.引言1.最小二乘问题2.迭代下降法3.最速下降法4.牛顿法5.阻尼法6.高斯牛顿(GN)法7.莱文贝格马夸特(LM)法8.鲁棒核函数 0.引言 转载自此处,修正了一点小错误。 1.最小二乘问题 在求解 SLAM 中的最优状态估计问题时,我们一般…

vue结合three.js加载3D模型报404错误

使用vue结合three.js加载3D模型时报404的错误,加载字体库也会报404错误,同样的方法。 vue项目虽然使用npm install three安装了three,但是有些静态资源时读取不到的,当出现异常的404错误时,比如加载3D模型资源时&…