模板类内部能否含有虚函数?

首先,我们要区分模板类虚函数和模板虚函数,话不多说,先上代码:

模板类虚函数
template<class T>
class A{
public:virtual ~A(){}virtual void foo(T &t){}
};template<class T, class R>
class B : public A<T>{R *r;
public:void foo(T &t) override{}
};//模板虚函数
class A{
public:virtual ~A(){}template<class T>virtual void foo(T &t){}
};class B : public A{
public:template<class T>void foo(T &t) override{}
};

显然模板虚函数无法通过编译,至于为什么?深究一下C++多态的实现原理,就能知道为什么不允许定义模板虚函数。

C++的多态是通过虚表实现的,对于含有虚函数的类,会为其定义一个虚表,每个实例化的对象都有一个指向该虚表的指针,所以同样的类,含有虚函数的类的实例大小比不含虚函数的多上一个指针的大小,虚表里为每个虚函数维护着一条跳转记录,这些跳转地址在编译期就被确定了,存放在类定义模块的数据段中,在程序运行期是不可修改的。

那么这跟模板虚函数有什么关系呢?
C++对于模版的处理,在编译时,编译器只对已经实例化的模板类生成对应的模板类代码,假如这些类中定义的有模板类虚函数,则对每个实例化的模板类型创建一个虚表,即第一种情况 —— 模板类虚函数,是可行的。

再看看模板虚函数为什么不行?
如上面的代码,A是一个类型,它含有模板虚函数,虽然是虚函数,但是函数符号并不确定,因为不知道模板T是一个什么类型,对于从没调用过这个模板函数的情况下,这个模板虚函数甚至都不会实例化,那么就相当于没有虚函数了。

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

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

相关文章

第一性原理

第一性原理是一个具有深厚哲学根基并广泛应用于多个领域的概念。以下是对其的详细解析&#xff1a; 一、定义 第一性原理&#xff08;the First Principle Thinking&#xff09;指的是从基本要素出发&#xff0c;不依赖于任何假设或经验&#xff0c;通过逻辑推理一步步建立起…

面向对象编程进阶笔记

一、代码重用与继承 在面向对象编程中&#xff0c;代码重用是一个核心概念&#xff0c;通过继承机制可以实现这一点。继承允许子类自动获得父类的所有方法和属性&#xff0c;无需重复编写相同的代码。子类在继承父类的基础上&#xff0c;可以添加自己特有的属性和方法&#xf…

番外篇 | 斯坦福提出即插即用二阶优化器Sophia :相比Adam实现2倍加速,显著节省大语言模型训练成本

前言:Hello大家好,我是小哥谈。大模型的预训练成本巨大,优化算法的改进可以加快模型的训练时间并减少训练开销。目前大模型的训练优化器基本上都采用Adam及其变体,并且Adam的应用已经有9个年头了,在模型优化方面相当于霸主的地位。但是能否够在优化器方面提高模型预训练效…

医院挂号系统:基于JSP和MySQL的现代化医疗预约平台

开头语&#xff1a;您好&#xff0c;我是专注于医疗系统开发的IT学长。如果您对医院挂号系统感兴趣&#xff0c;欢迎联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术&#xff0c;B/S架构 工具&#xff1a;Eclipse&#xff0c;MyEclips…

中国企业消费管理,驶入“降本”大潮

在足够明晰的成本优化方案之上&#xff0c;能看到除了美团企业版的产品和需求理解能力&#xff0c;更本质的恰在于其最核心的原子能力——即强供应链底座。 这种兼备深度和广度的能力的最终呈现也就是如今美团为企业提供的多元、优质、满足需求的成本考校和计算方案。 作者…

【Python】成功解决TypeError: ‘float‘ object cannot be interpreted as an integer

【Python】成功解决TypeError: ‘float’ object cannot be interpreted as an integer 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主…

SpringSecurity中文文档(Servlet CAS)

CAS Authentication Overview JA-SIG 生产了一个名为 CAS 的企业级单点登录系统。与其它倡议不同&#xff0c;JA-SIG 的中央认证服务是开源的&#xff0c;广泛使用&#xff0c;易于理解&#xff0c;平台独立&#xff0c;并支持代理功能。Spring Security 完全支持 CAS&#x…

现代信息检索笔记(一)——课程简介

目录 什么是信息检索 应用一&#xff1a;做搜索引擎 应用二&#xff1a;信息推荐系统 应用三&#xff1a;婚恋网站 信息检索的具体应用 从信息规模上分类 为什么要学习信息检索技术&#xff1f; 市场发展需求大 应用需求多&#xff1a; 课程情况 课程宗旨 国际著名…

客户端渗透

1.一键可执行程序 2.给程序加壳 3.宏病毒感染文档 4.Android apk 利用 1.一键可执行程序 介绍&#xff1a;我们要进行客户端渗透&#xff0c;我们生成一个可执行程序&#xff0c;也是简单粗暴&#xff0c;MSF建立监听&#xff0c;把它发给受害者&#xff0c;只要受害者点击…

【面试系列】C 语言高频面试题

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

VQ-VAE中如何解决梯度截断(不可导)问题?直通估计、(stop gradient,停止梯度)

&#xff08;stop gradient&#xff0c;停止梯度&#xff09;运算 它简称为sg 也就是说&#xff0c;前向传播时&#xff0c;&#x1d460;&#x1d454;里的值不变(sg1)&#xff1b;反向传播时&#xff0c;&#x1d460;&#x1d454;按值为0求导(sg0)&#xff0c;即此次计算无…

canvas画箭头线

箭头线 vueuni-appcanvas 画带箭头可拖动的线段 <template><div><canvas ref"canvas" class"canvas" width"600px" height"400px" mousedown"startDrawing" mousemove"draw" mouseup"stopD…

Centos手动安装PHP和配置mydqli模块

第一步&#xff1a;手动安装php和php-fpm sudo yum install php php-fpm 安装 sudo systemctl start php-fpm 启动 sudo systemctl enable php-fpm 开机启动 php -v php-fpm -v PHP 5.4.16 (cli) (built: Apr 1 2020 04:07:17) Copyright (c) 1997-2013 The PHP G…

【加密与解密】【09】GPG Client签名流程

什么是GPG客户端 GPG客户端是实现PGP加密协议的一套客户端程序&#xff0c;可用于加密或签名 下载GPG客户端 建议安装命令行工具&#xff0c;图形工具一般不具备完整功能 https://gnupg.org/download/index.html生成私钥 此时会要求你输入名称&#xff0c;邮箱&#xff0c…

Qt Q_ASSERT详解

Q_ASSERT详解 引言一、基本用法二、深入了解三、参考链接 引言 Q_ASSERT是 Qt 框架中的一个宏&#xff0c;用于在调试时检查某个条件是否为真。它是程序调试中的一个重要工具&#xff0c;有助于开发者在开发过程中及时发现并修复潜在的错误。 一、基本用法 只在使用 Qt 的 D…

干货:科技论文写作保姆级攻略

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。科技论文是报道自然科学研究或技术开发工作成果的论说文章。通常基于概念、判断、推理、证明或反驳等逻辑思维体系&#xff0c;使用实验调研或理论计算等研究手段&#xff0c;按照特定格式撰写完成。 科技论文可以粗略分为…

UiPath+Appium实现app自动化测试

一、环境准备工作 1.1 完成appium环境的搭建 参考&#xff1a;pythonappiumpytestallure模拟器(MuMu)自动化测试环境搭建_appium mumu模拟器-CSDN博客 1.2 完成uipath的安装 登录官网&#xff0c;完成注册与软件下载安装。 UiPath业务自动化平台&#xff1a;先进的RPA及自动…

vue组件深入介绍之插槽

了解插槽之前请先了解vue组件基础及注册 Vue2官网介绍 Vue3官网介绍 1、vue2插槽介绍 在2.6.0中&#xff0c;具名插槽和作用域插槽引入了一个新的统一语法&#xff08;v-slot指令&#xff09;。它将取代slot和slot-scope&#xff1b; Vue 实现了一套内容分发的 API&#xf…

AI 会淘汰程序员吗?

前言 前些日子看过一篇文章&#xff0c;说国外一位拥有 19 年编码经验、会 100% 手写代码的程序员被企业解雇了&#xff0c;因为他的竞争对手&#xff0c;一位仅有 4 年经验、却善于使用 Copilot、GPT-4 的后辈&#xff0c;生产力比他更高&#xff0c;成本比他更低&#xff0c…

【数据分享】《中国金融年鉴》1986-2020年PDF版

而今天要免费分享的数据就是1986-2020年间出版的《中国金融年鉴》并以多格式提供免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 《中国金融年鉴》自1986年起&#xff0c;逐年记录着中国金融领域的发展历程、政策变化和市场动态。这部年鉴不仅是金融专业…