为什么多态性在没有指针/引用的情况下不起作用?

2023-11-27

我确实在 StackOverflow 上发现了一些具有类似标题的问题,但是当我阅读答案时,他们关注的是问题的不同部分,这些部分非常具体(例如 STL/容器)。

有人可以告诉我,为什么必须使用指针/引用来实现多态性吗?我可以理解指针可能会有所帮助,但是引用肯定只能区分按值传递和按引用传递吗?

当然,只要你在堆上分配内存,这样你就可以进行动态绑定,那么这就足够了。很明显不是。


“当然,只要你在堆上分配内存” - 内存分配到哪里与它无关。这都是关于语义的。举个例子:

Derived d;
Base* b = &d;

d位于堆栈上(自动内存),但多态性仍然有效b.

如果您没有基类指针或对派生类的引用,则多态性不起作用,因为您不再拥有派生类。拿

Base c = Derived();

The c对象不是一个Derived, but a Base, 因为slicing。所以,从技术上讲,多态性仍然有效,只是你不再拥有Derived谈论的对象。

Now take

Base* c = new Derived();

c只是指向内存中的某个位置,而你并不真正关心它是否真的是一个Base or a Derived,但是调用virtual方法将被动态解析。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么多态性在没有指针/引用的情况下不起作用? 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li

随机推荐

  • iOS 5:我可以让我的应用程序默认处于“通知中心”状态吗?

    我在 App Store 中有一个 iPad 应用程序 其逻辑很大程度上依赖于本地通知 换句话说 应用程序内部发生的许多事情都是由委托方法应用程序 didReceiveLocalNotification 触发的 随着今天发布的 iOS 5
  • grails 文件下载

    我已经成功地制作了一个文件上传系统 该系统基本上是将文件复制到特定文件夹并将其位置保存在数据库中 现在我需要有关下载部分的帮助 想象我的文件位置是 文件 1306242602661 file1 exe 在我看来 我有这样的
  • Material-UI:提供给 createMuiTheme 的阴影数组应支持 25 个高度

    我正在尝试消除 Material UI 主题中的阴影 我找到了这个在这里回答并解决问题 但是我在这个问题的标题中收到错误消息 const theme createMuiTheme palette primary light red 300
  • 有没有办法用JS从渲染的页面中获取所有文本?

    有没有一种 对用户来说不显眼的 方法来使用 Javascript 获取页面中的所有文本 我可以获取 HTML 解析它 删除所有标签等 但我想知道是否有办法从已渲染的页面获取文本 澄清一下 我不想从选择中抓取文本 我想要整个页面 谢谢你 全部
  • ASP.NET MVC 5(VS2013 最终版):使用 OWIN 登录 Facebook 失败(loginInfo 为 null)

    我安装了昨天发布的 VS2013 最终版本 并且我正在尝试获取一个启用外部 Facebook 登录的示例 我的第一个问题 在此控制器代码中 我没有触及并按示例模板中的原样保留 GET Account ExternalLoginCallbac
  • 在 Chrome 中检测访问过的链接

    我正在使用 Chrome 和 Firefox 的用户脚本 并且正在检查用户访问过的链接 我有 a color blue a visited color red important 在我的 css 中 页面加载后就导入了 我访问过的页面上的
  • Spring LDAP - 绑定成功连接

    我正在尝试使用 Spring LDAP 和 Spring 安全性进行身份验证 然后查询我们的公司 LDAP 我设法使身份验证工作 但当我尝试运行搜索时 我总是遇到以下异常 为了执行此操作 必须在连接上成功完成绑定 经过大量研究后 我有一个理
  • 在Android 4.2中访问/sdcard

    我正在开发一个需要直接访问 sdcard 根文件夹的应用程序 但在 Android 4 2 中 标准 sdcard 目录现在指向特定于运行该应用程序的用户的 模拟 sdcard 这不好 因为我的应用程序需要访问存储在 SD 卡顶层的文件 有
  • tkinter 按钮不显示图像

    您好 我正在尝试将图像作为其中一个按钮的背景 我已经在主窗口中的许多其他按钮上完成了此操作 但是这个特定的按钮位于顶级窗口内 并且图像无法像它一样加载应该 有人知道为什么吗 我也尝试定义按钮的宽度和高度 但仍然不显示图像 def rec w
  • 为什么delayed_job中的时区关闭?

    在我的 Rails 应用程序中 当我使用延迟作业宝石 我所有的时间都偏移了 6 小时 我的理解是Delayed job 使用您的时区 但好像用错了 而不是距离 UTC 为 6 小时 CST是我的时区 现在是 12 小时 这里有一些视图代码来
  • 打印包含“word”的行 python

    我只想打印以下输出中包含 Server 的行 Date Sun 16 Dec 2012 20 07 44 GMT Expires 1 Cache Control private max age 0 Content Type text htm
  • Laravel 表单不会 PATCH,只会 POST - 嵌套 RESTfull 控制器、MethodNotAllowedHttpException

    我正在尝试允许users编辑他们的playlist 但是 每当我尝试执行 PATCH 请求时 我都会得到MethodNotAllowedHttpException错误 它正在等待一个帖子 我已经设置了 RESTful 资源控制器 路线 ph
  • 如何在 bash 的 CURL 请求中使用变量?

    Goal 我正在使用 bash CURL 脚本连接到 Cloudflare APIv4 目标是更新 A 记录 我的脚本 Get current public IP current ip curl silent ipecho net plai
  • 如何在android中动态提供地图api密钥

    我的 Android 应用程序中有一个用例 我的应用程序的用户必须提供 API 密钥 以便他们可以使用地图 但我发现我必须在清单文件中提供 API 密钥 我无法在运行时编辑它 有没有其他方法可以动态地将地图 API 密钥提供给谷歌地图 我正
  • iframe 中 url 的基本身份验证

    我需要验证从页面上的 iframe 通过 javascript 创建 发送的请求 身份验证将通过基本的 http 身份验证完成 我试过做 http user password server 但显然由于安全异常 这在 IE 中不可用 http
  • 如何在 IIS 上设置反向代理,以允许 host1.mydomain.com 和 host2.mydomain.com 之间进行跨主机通信?

    我在 host1 mydomain com page from host1 jsp 上有一个页面 在 host2 mydomain com page from host2 html 上有一个 HTML 页面 host1 是 IIS7 Tom
  • 在 Android 4.4 中启用 TLS 1.2

    我使用 Retrofit 和 OkHttp3 来发出请求 我知道在 Android 4 4 中 默认情况下未启用 TLS 1 1 和 TLS 1 2 所以我正在尝试启用它们 但到目前为止我还没有成功 我读到这可能是 android stud
  • 如何移动google地图的中心位置

    我正在使用以下代码在脚本中创建谷歌地图 var mapElement parent mapOptions map marker latLong openMarker parent document getElementsByClassNam
  • Gitlab 端口 8080

    我目前正在尝试在我的私人 Debian 服务器上安装 Gitlab 综合总线 它在端口 80 上运行得很好 问题是我还有一个 Apache 服务器在监听端口 80 所以我正在尝试让 Nginx监听端口 8080 但由于某种原因我得到了 50
  • 为什么多态性在没有指针/引用的情况下不起作用?

    我确实在 StackOverflow 上发现了一些具有类似标题的问题 但是当我阅读答案时 他们关注的是问题的不同部分 这些部分非常具体 例如 STL 容器 有人可以告诉我 为什么必须使用指针 引用来实现多态性吗 我可以理解指针可能会有所帮助