在公有继承情况下,关于指针或引用的思考

-bootblack- 2016-02-24 01:46:12


基类指针可以在不进行显示类型转换的情况下指向派生类对象.
基类引用可以在不进行显示类型转换的情况下引用派生类对象.

摘自:<<C++ primer plus>>
上面的这句话正确吗?
...全文
424 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fefe82 2016-02-25
  • 打赏
  • 举报
回复
引用 7 楼 fefe82 的回复:
[quote=引用 6 楼 liuchangkk1 的回复:] [quote=引用 5 楼 fly_dragon_fly 的回复:] 没有问题, 你的理解是怎么样的
我知道这个不算是强制类型转换,但是它表达的意义似乎与向下强制类型转换相同. 都是基类指向派生类 是不是我被这2个概念弄糊涂了???[/quote] 强制类型转换会生成临时对象,这里没有。 向下强制类型转换,实际是用基类子对象拷贝构造了一基类临时对象。这个基类临时对象是一个完整的对象,而不是任何一个其他对象的基类子对象。它也不在包含派生类的任何信息。 用基类指针指向派生类对象,指针实际直接指向派生类的基类子对象,没有临时对象生成。通过被指向的基类子对象,还可能找到派生类对象的信息。 基类引用绑定到派生类对象上是同样的过程,没有临时对象生成,是直接绑定到派生类的基类子对象上。[/quote] 不过这里虽然没有对对象进行强制类型转换,但是指针的类型确实发生了类型转换。由派生类的指针转换为了基类的指针。 基类引用绑定到派生类对象的时候没有类型转换发生。基类的引用可以直接绑定到派生类的基类子对象上。
fefe82 2016-02-25
  • 打赏
  • 举报
回复
引用 6 楼 liuchangkk1 的回复:
[quote=引用 5 楼 fly_dragon_fly 的回复:] 没有问题, 你的理解是怎么样的
我知道这个不算是强制类型转换,但是它表达的意义似乎与向下强制类型转换相同. 都是基类指向派生类 是不是我被这2个概念弄糊涂了???[/quote] 强制类型转换会生成临时对象,这里没有。 向下强制类型转换,实际是用基类子对象拷贝构造了一基类临时对象。这个基类临时对象是一个完整的对象,而不是任何一个其他对象的基类子对象。它也不在包含派生类的任何信息。 用基类指针指向派生类对象,指针实际直接指向派生类的基类子对象,没有临时对象生成。通过被指向的基类子对象,还可能找到派生类对象的信息。 基类引用绑定到派生类对象上是同样的过程,没有临时对象生成,是直接绑定到派生类的基类子对象上。
-bootblack- 2016-02-25
  • 打赏
  • 举报
回复
引用 5 楼 fly_dragon_fly 的回复:
没有问题, 你的理解是怎么样的
我知道这个不算是强制类型转换,但是它表达的意义似乎与向下强制类型转换相同. 都是基类指向派生类 是不是我被这2个概念弄糊涂了???
fly_dragon_fly 2016-02-25
  • 打赏
  • 举报
回复
没有问题, 你的理解是怎么样的
yshuise 2016-02-24
  • 打赏
  • 举报
回复
不是强制转换,而是怎么样规定 的!
ztenv 版主 2016-02-24
  • 打赏
  • 举报
回复
引用 2 楼 liuchangkk1 的回复:
[quote=引用 1 楼 lianshaohua 的回复:] 为什么不正确? 比如: class A{}; class B:public A{}; A* pa=new B();//基类指针pa可以在不进行显示类型转换的情况下指向派生类对象 new B()
那这个算不算向下强制类型转换啊?downcasting[/quote] 类型没有发生转换呀!!!!!!!
-bootblack- 2016-02-24
  • 打赏
  • 举报
回复
引用 1 楼 lianshaohua 的回复:
为什么不正确? 比如: class A{}; class B:public A{}; A* pa=new B();//基类指针pa可以在不进行显示类型转换的情况下指向派生类对象 new B()
那这个算不算向下强制类型转换啊?downcasting
ztenv 版主 2016-02-24
  • 打赏
  • 举报
回复
为什么不正确? 比如: class A{}; class B:public A{}; A* pa=new B();//基类指针pa可以在不进行显示类型转换的情况下指向派生类对象 new B()

65,210

社区成员

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

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