关于dynamic_cast, 从父类转到子类的问题

superwavelet 2013-04-06 09:43:12
试定义两个类:
class A 
{
int a;
}

class B: public A
{
int b;
}

A *pointerA = new A;
B *pointerB = dynamic_cast<B*>(pointerA);
C *pointerC = dynamic_cast<B*>(pointerA);


问题是:
1. 现在pointerA->b; 有效吗?
2. pointerC 和 pointerB (和 pointerA) 是不是指向同一个内存数据区域?

先谢啦
...全文
353 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
superwavelet 2014-03-17
  • 打赏
  • 举报
回复
引用 5 楼 zhang20072844 的回复:
基类不能转到派生类吧。 B转到A可以
应该就是这样了
xiaoxiaokun888 2013-04-09
  • 打赏
  • 举报
回复
虚函数呢啊?
AndyZhang 2013-04-07
  • 打赏
  • 举报
回复
基类不能转到派生类吧。 B转到A可以
zilaishuichina 2013-04-07
  • 打赏
  • 举报
回复
在lz这段代码中 dynamic_cast返回空
z8323664 2013-04-07
  • 打赏
  • 举报
回复
引用 2 楼 superwavelet 的回复:
引用 1 楼 kuanglong2016 的回复:1. pointerA->b无效,因为类A中没有成员b 2. 不知道C是什么,如果也是继承体系中的,但不存在多重继承的话,则是同一个内存数据区域 另外,我觉得dynamic_cast<B*>(pointerA);应该会返回一个NULL 那 pointerB->b有效了吧?
无效 你给new的是A,转B 会NULL 的; 除非你new的是B的对象 还有 你类中如果没有虚函数无法用dynamic_cast 可以用static_cast
superwavelet 2013-04-07
  • 打赏
  • 举报
回复
引用 1 楼 kuanglong2016 的回复:
1. pointerA->b无效,因为类A中没有成员b 2. 不知道C是什么,如果也是继承体系中的,但不存在多重继承的话,则是同一个内存数据区域 另外,我觉得dynamic_cast<B*>(pointerA);应该会返回一个NULL
那 pointerB->b有效了吧?
十毛 2013-04-06
  • 打赏
  • 举报
回复
1. pointerA->b无效,因为类A中没有成员b 2. 不知道C是什么,如果也是继承体系中的,但不存在多重继承的话,则是同一个内存数据区域 另外,我觉得dynamic_cast<B*>(pointerA);应该会返回一个NULL
Re:CCNA_CCNP 思科网络认证 PAT NAT 端口或地址转换 与端口映射======================# 本章课程大纲        公网地址和私网地址        NAT应用场景        静态NAT  :static  地址转换        动态NAT  :dynamic地址转换        PAT        :端口地址转换        端口映射 :port map        在Windows上同时实现的NAT和端口映射 # 私网地址三类 A类:10.0.0.0                                255.0.0.0(1网段) B类:172.16.0.0 -172.31.0.0         255.255.0.0(16网段) C类:192.168.0.0-192.168.255.0  255.255.255.0(255网段) # NAT 的使用场景        NAT的最初的目的是允许把私有IP地址映射到公网地址,以减缓IP地址空间的消耗。        当一个组织更换它的互联网服务提供商ISP,但不想更改内网配置方案时,NAT同样很有用途。        以下是适于使用NAT的多种情况:         企业内网接入Internet节省公网地址         单向访问         大方向:内网访问互联网(互联网上主机不能够访问内网主机)         小方向:同单位实现两个网段之间单向访问(涉密部门能够访问其他部门,反之不可)         增加一个网段          避免在主干路由器增加到这个网段的路由         在Windows上实现的NAT和端口映射 # 网络地址转换的类型        下面介绍一下NAT的三种类型。         静态NAT 是为了在私网地址和公网地址间,允许一对一映射而设计的。         或者IPv4和IPv6之间的转换(典型)         不节省公网地址,故公网地址的利用效率不高,         无任何安全性,外网可以通过公网地址直接攻击内网主机,好像只增加路由器的工作         适用场景类似代理,可以较方便的更换主机,而无需修改路由器的配置         故应用不够广泛...         动态NAT 可以实现映射一个未注册 IP地址到注册IP地址池中的一个注册IP地址。         多对一,或多对多         比较PAT优势:避免被误认为攻击而被封ip地址         不太节省地址,应用不广泛         复用是最流行的NAT配置类型,也被称为端口地址映射(PAT)。         通过使用PAT,可实现上千个用户仅通过一个真实的全球 IP地址连接到Internet。         缺点:增加延迟,消耗路由器性能 # 端口映射(port mapping) 允许Internet上的计算机通过企业路由器的公网IP地址访问到内网的服务器------------------------------------------------         

64,633

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧