派生类强制转换为基类

本文地址: 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 <iostream> 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;
}

输出:

equal
not equal
equal

最新文章

  1. 自动适应iframe右边的高度
  2. Java Web之会话技术
  3. 63-w 简明笔记
  4. 【转】常用的shell脚本
  5. UML统一建模编程
  6. metasploit升级(BT5)
  7. Unity安卓上播放视频的问题,暂时无解记录一下
  8. Strange java.lang.ArrayIndexOutOfBoundsException thrown on jetty startup
  9. Oracle数据库间的数据复制 - SQLPlus中的COPY命令
  10. 去掉eclipse js 错误提示
  11. sqlcode、sqlerrm
  12. CPrimer Plus第12章 存储类、链接和内存管理随笔
  13. break在switch中的使用例子
  14. 基于EF+MVC+Bootstrap的通用后台管理系统及架构
  15. JAVA printWriter中write()和println()区别
  16. c# 多线程 创建对象实例
  17. 掌握这些知识,你的python水平能更上一层楼
  18. 【转】kali配置--修改IP和DNS
  19. sublime text3中sass编译后保存到指定文件夹
  20. Code Blocks+gtest环境配置

热门文章

  1. bootstrap学习(全局CSS样式)(二)
  2. 93.数字三角形W(深搜)
  3. [转]软件开发规范—模块开发卷宗(GB8567——88)
  4. Linux关于终端的基本概念汇总(tty/pty)(转)
  5. (转)DLL中导出函数的两种方式(dllexport与.def文件)
  6. 安装maven,eclipse及eclipse配置maven
  7. python2解决中文问题(无论是注释还是代码含有中文)
  8. 【好】strong-password-checker,我自己做出来的:)
  9. JS函数节流和函数防抖问题分析
  10. javat Itext实践 pdf