博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ - 派生类强制转换为基类
阅读量:4331 次
发布时间:2019-06-06

本文共 971 字,大约阅读时间需要 3 分钟。

派生类强制转换为基类

本文地址: http://blog.csdn.net/caroline_wendy/article/details/24268821

在多态的使用时, 派生类的指针或引用能够转换为基类的指针或引用, 即基类的指针能够指向派生类的基类部分;

Base* b = Derived* d;

b和d指向的内容是相等的, b == d, 由于之间有一个隐式转换即 b == (Base*)d;

b和d的地址是不同的 int(b) != int(d), 由于b指向d的基类部分, d指向的是完整的派生类;

但假设进行隐身转换, int(b) != int((Base*)d), 则地址同样.

代码例如以下:

/* * test.cpp * *  Created on: 2014.04.21 *      Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include 
class A { int m_nA;};class B { int m_nB;};class C : public A, public B { int m_nC;};int main(void){ C* pc = new C; B* pb = pc; if (pc == pb) { std::cout << "equal" << std::endl; } else { std::cout << "not equal" << std::endl; } if (int(pc) == int(pb)) { std::cout << "equal" << std::endl; } else { std::cout << "not equal" << std::endl; } if (int(pc) == int((C*)pb)) { std::cout << "equal" << std::endl; } else { std::cout << "not equal" << std::endl; } return 0;}
输出:

equalnot equalequal

转载于:https://www.cnblogs.com/lytwajue/p/6762173.html

你可能感兴趣的文章
flume handler
查看>>
收藏其他博客园主写的代码,学习加自用。先表示感谢!!!
查看>>
H5 表单标签
查看>>
su 与 su - 区别
查看>>
C语言编程-9_4 字符统计
查看>>
在webconfig中写好连接后,在程序中如何调用?
查看>>
限制用户不能删除SharePoint列表中的条目(项目)
查看>>
【Linux网络编程】使用GDB调试程序
查看>>
feign调用spring clound eureka 注册中心服务
查看>>
ZT:Linux上安装JDK,最准确
查看>>
LimeJS指南3
查看>>
关于C++ const成员的一些细节
查看>>
《代码大全》学习摘要(五)软件构建中的设计(下)
查看>>
C#检测驱动是否安装的问题
查看>>
web-4. 装饰页面的图像
查看>>
微信测试账户
查看>>
Android ListView上拉获取下一页
查看>>
算法练习题
查看>>
学习使用Django一 安装虚拟环境
查看>>
Hibernate视频学习笔记(8)Lazy策略
查看>>