Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从派生对象获取基对象的地址

从派生对象获取基对象的地址
EN

Stack Overflow用户
提问于 2011-06-18 21:03:35
回答 3查看 3.5K关注 0票数 1

我的程序中出现了一个非常令人困惑的错误。我想我可能在同一个类中有两个不同的对象,而我认为我有相同的对象。这是令人困惑的,因为我正在处理一个非常大的框架,在这个框架中获取我需要的对象的指针并不简单。

我的问题是,如果我有一个从Base继承的派生类,并且我有一个指向派生对象的指针,我如何从派生对象中获得Base对象的地址?我正在使用基类的源代码,并打印出"this“在Base中的地址。在我代码的另一部分中,a检索一个指向派生的指针。我需要能够通过我的派生对象打印基对象的地址,以确定我是否有指向所需特定派生对象的指针。

我可能对继承中的地址在C++中的工作方式有很大的误解。也许它们只是一个对象,而不是链接到派生对象的基对象?

非常感谢

编辑:我想这样做的原因纯粹是为了调试。问题是,我使用的代码库没有包含很多接口或受保护的成员,因此我必须编辑源代码才能访问特定的信息。但是,当我使用特定的派生指针调用添加到基类中的方法时,程序会崩溃。在这种情况下,我需要能够打印基对象的地址,这样才能确定这是不是正确的对象,或者我是否得到了这个错误,因为我实际上有一个指向错误对象的指针。我意识到我可以向派生类添加代码以使其打印其地址,但我只是想知道是否可以在不再编辑源代码的情况下获得地址。谢谢

EN

回答 3

Stack Overflow用户

发布于 2011-06-18 21:14:52

从指向派生类的指针到指向基类的指针很容易:

代码语言:javascript
运行
AI代码解释
复制
Derived * derived_ptr = < some pointer >;
Base * base_ptr = derived_ptr;

如果你想学究,你可以在任务的右边使用static_cast

代码语言:javascript
运行
AI代码解释
复制
Base * base_ptr = static_cast<Base*>(derived_ptr);

从指向基类的指针到指向派生类的指针使用dynamic_cast

代码语言:javascript
运行
AI代码解释
复制
Derived * derived_ptr = dynamic_cast<Derived*>(base_ptr);

然而,这并不总是有效的。您需要启用运行时typeid,并且基类至少需要有一个虚方法。

在执行此操作之前,为什么需要从基指针转到派生指针?这是一个提示,你可能需要重新考虑你的设计。

票数 5
EN

Stack Overflow用户

发布于 2011-06-18 21:07:15

只有一个对象,它由一个基本对象和一个派生对象组成-也就是说,在大多数实现中,基本对象被放入内存中,紧挨着派生对象。这意味着基数*与一般情况下的派生数*不同,但它们将非常接近。

现在,您可以简单地从派生的*中获取Base*,强制转换是隐式的,但您也可以显式地使用它:

代码语言:javascript
运行
AI代码解释
复制
Derived* dptr = ...;
Base* ptr = dptr;

但是,没有什么可以阻止单个派生对象包含多个Base对象。通常情况下不是这样,但它可能会发生。这意味着你不能比较Base指针并期望知道你是否在处理相同的对象,仅仅是相同的Base子对象。

票数 3
EN

Stack Overflow用户

发布于 2011-06-18 21:27:03

在简单的单继承情况下,使用大多数编译器:

如果你有一个指向派生类的指针,那么它和指向基类的指针是一样的。这两个指针具有相同的值并指向相同的存储器地址。

在内存中,如果创建一个派生类的实例,它将被布局为基对象的成员,后跟派生对象的成员。基类成员构成派生对象的一部分。

代码语言:javascript
运行
AI代码解释
复制
class Base
{
   int b;
};

class Derived : public Base
{
   int d;
};

在内存中,假设派生指针是0400。然后:

代码语言:javascript
运行
AI代码解释
复制
0400 byte 1 of b
0401 byte 2 of b
0402 byte 3 of b
0403 byte 4 of b
0404 byte 1 of d
0405 byte 2 of d
0406 byte 3 of d
0407 byte 4 of d

派生对象由基成员和派生的自己的成员组成,这两个成员的地址都从0400开始。

恰好如此,在0400,派生的基本对象部分被定位。因此,基本和派生具有相同的地址。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6398888

复制
相关文章
Livy:基于Apache Spark的REST服务
Apache Spark提供的两种基于命令行的处理交互方式虽然足够灵活,但在企业应用中面临诸如部署、安全等问题。为此本文引入Livy这样一个基于Apache Spark的REST服务,它不仅以REST的方式代替了Spark传统的处理交互方式,同时也提供企业应用中不可忽视的多用户,安全,以及容错的支持。 背景 Apache Spark作为当前最为流行的开源大数据计算框架,广泛应用于数据处理和分析应用,它提供了两种方式来处理数据:一是交互式处理,比如用户使用spark-shell或是pyspark脚本启动Sp
CSDN技术头条
2018/02/13
4K0
Livy:基于Apache Spark的REST服务
基于spring-boot的rest微服务框架
周末在家研究spring-boot,参考github上的一些开源项目,整了一个rest微服务框架,取之于民,用之于民,在github上开源了,地址如下:
菩提树下的杨过
2018/09/20
8040
Ajax的异步请求探究
在开发中经常使用ajax去请求接口,而ajax不是一项新的技术,基于原生的XmlHttpRequest对象和html css js共同完成 在了解ajax之前先搞清楚什么是http, 想要了解更多可访问mozllia(霸王龙)的 https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/send# Http
用户9347382
2022/01/10
8650
Rest API请求管理最佳实践:RestClient-cpp库的应用案例
在当今互联网时代,REST(Representational State Transfer)API已经成为了现代应用程序开发的重要组成部分。随着各种网络服务和应用程序的不断涌现,有效地管理和调用REST API变得至关重要。为了解决这一需求,开发人员们倾向于寻找可靠且易于使用的库来简化REST API请求的处理。
小白学大数据
2024/03/29
2930
AsyncContext异步请求的用法
在Servlet 3.0中,在ServletRequest上提供了startAsync()方法
全菜工程师小辉
2019/09/16
5.4K0
AsyncContext异步请求的用法
HarmonyOS 开发实践 —— 基于@ohos/axios的网络请求能力
Axios 是一个基于promise的网络请求库,可以运行node.js和浏览器中。基于Axios原库v1.3.4GitHub版本进行适配,使其可以运行在OpenHarmony并沿用其现有用法和特性。
小帅聊鸿蒙
2024/12/03
3110
HarmonyOS 开发实践 —— 基于@ohos/axios的网络请求能力
HarmonyOS 开发实践 —— 基于rcp的网络请求能力
rcp模块提供HTTP数据请求功能,请求性能如接口的易用性、性能、功耗方面,对比Network Kit HTTP网络API,rcp采用面向对象和场景的设计,API使用更简单、更灵活,满足不同场景的使用需求,具备更好的扩展性和更优的性能。支持如场景化网络API、网络代理、自定义DNS解析、自定义证书校验、服务器身份校验等特性。
小帅聊鸿蒙
2024/11/22
2220
HarmonyOS 开发实践 —— 基于rcp的网络请求能力
Angular 实践:如何优雅地发起和处理请求
Tips: 本文实现重度依赖 ObservableInput,灵感来自同事 @Mengqi Zhang 实现的 asyncData 指令,但之前没有 ObservableInput 的装饰器,处理响应 Input 变更相对麻烦一些,所以这里使用 ObservableInput 重新实现。
灵雀云
2020/02/26
8680
Angular 实践:如何优雅地发起和处理请求
Netflix 微服务异步迁移:从同步的“请求响应”模式转换为异步事件
假设我们正在运行一个基于 Web 的服务。请求处理变慢最终将会导致服务不可用。实际上,并不是所有的请求都需要立即处理。有些请求只要确认已收到即可。你有没有问过自己这样的问题:“我是否能够从异步请求处理中获益?如果确实如此的话,我该如何在一个实时的、大规模的关键任务系统中做出这种转变?”
深度学习与Python
2022/11/28
7870
Netflix 微服务异步迁移:从同步的“请求响应”模式转换为异步事件
Livy,基于Apache Spark的开源REST服务,加入Cloudera Labs
Hadoop生态圈的Spark(https://www.cloudera.com/products/open-source/apache-hadoop/apache-spark.html),一夜之间成为默认的数据处理引擎,并被作为高级分析的标准。但是它依旧有许多东西需要完善,特别是在大规模/多租户,开发与投产,以及可扩展性方面。
Fayson
2018/03/29
2.4K0
基于zookeeper的微服务实践
微服务的话题也火了好几年了,各类微服务架构的文章也是非常的多,这里也阐述下个人对微服务系统的见解。
DifficultWork
2019/06/03
1.2K0
Spring Boot快速开发REST服务实践
REST代表Representational State Transfer. 是一种架构风格,设计风格而不是标准,可用于设计Web服务,可以从各种客户端使用.
用户5224393
2019/08/30
8250
Spring Boot快速开发REST服务实践
基于 Docker 的微服务架构实践
基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Docker 的技术体系的快速发展。本文主要是结合在公司搭建的微服务架构的实践过程,做一个简单的总结。希望给在创业初期探索如何布局服务架构体系的 DevOps,或者想初步了解企业级架构的同学们一些参考。
烂猪皮
2018/08/03
2.6K0
基于 Docker 的微服务架构实践
Java调用外部REST请求的几种方式
1、RestOperations 提供了各种封装方法,非常方便直接将返回转成实体类。
伍六七AI编程
2022/03/23
8130
python-异步IO编程-异步HTTP请求的实现
在传统的同步IO编程中,当我们发起一个HTTP请求时,我们需要等待服务器返回响应,这样就会阻塞当前线程的执行。如果需要发起多个HTTP请求,就需要创建多个线程或进程来处理这些请求,这样会造成资源浪费和性能下降。为了解决这个问题,Python提供了异步IO编程模型,可以实现异步HTTP请求,从而提高程序的性能和并发能力。
玖叁叁
2023/04/21
7330
Spring 3.0支持基于rest的Web服务学习总结
尽管RESTful功能被添加到Spring MVC框架非常早期通过注释和其他API功能,支持基于rest的Web服务是Spring MVC有点晚。几个jax - rs(RESTful Web服务的Java API)实现,比如Restlet RESTEasy和球衣支持rest风格的Web服务,但Spring社区没有添加到Spring 3.0支持rest风格的Web服务功能。在这篇文章中,我讨论了Spring 3.0支持开发RESTful Web服务,检查类和注释。 快速复习,RESTful Web服务的Web
用户1289394
2018/02/27
1.3K0
小白需懂的异步请求的处理
在我们传统的服务中,当一个HTTP请求过来时,tomcat或者是其他的中间件都会有一个主线程来处理请求,所有的业务逻辑都会在这个线程里面处理完,最后会给出一个响应。由于我们的tomcat所管理的线程数是有限的,当线程到达一定程度后,再有请求过来将会无法去处理了。
用户7386338
2020/05/29
2.1K0
servlet异步请求
其中第二步处理业务逻辑时候很可以碰到比较耗时的任务,此时servlet主线程会阻塞等待完成业务处理,对于并发比较大的请求可能会产生性能瓶颈,则servlet3.0之后再此处做了调整,引入了异步的概念。
全栈程序员站长
2022/09/18
9130
servlet异步请求
ajax发送异步请求四个步骤,AJAX的异步请求的四个步骤[通俗易懂]
全部的现代浏览器均支持XMLHttpRrquest对象(IE5和IE6使用ActiveObject)async
全栈程序员站长
2022/08/29
1.4K0
Spring 异步请求
With the above in mind, the following is the sequence of events for async request processing with a Callable:
数媒派
2022/12/01
8110

相似问题

是否有可能将类似Lisp的宏构建为命令式语言?

34

是否有可能从eclipse构建过程中获得确切的maven命令?

14

是否有可能对无序元素进行响应式设计?

10

是否有可能脱离基于条件执行的bash命令?

12

是否有可能成功地包装退出方法?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文