C++ - 派生类强制转换为基类
2024-09-02 21:40:33
派生类强制转换为基类
本文地址: 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
最新文章
- 自动适应iframe右边的高度
- Java Web之会话技术
- 63-w 简明笔记
- 【转】常用的shell脚本
- UML统一建模编程
- metasploit升级(BT5)
- Unity安卓上播放视频的问题,暂时无解记录一下
- Strange java.lang.ArrayIndexOutOfBoundsException thrown on jetty startup
- Oracle数据库间的数据复制 - SQLPlus中的COPY命令
- 去掉eclipse js 错误提示
- sqlcode、sqlerrm
- CPrimer Plus第12章 存储类、链接和内存管理随笔
- break在switch中的使用例子
- 基于EF+MVC+Bootstrap的通用后台管理系统及架构
- JAVA printWriter中write()和println()区别
- c# 多线程 创建对象实例
- 掌握这些知识,你的python水平能更上一层楼
- 【转】kali配置--修改IP和DNS
- sublime text3中sass编译后保存到指定文件夹
- Code Blocks+gtest环境配置
热门文章
- bootstrap学习(全局CSS样式)(二)
- 93.数字三角形W(深搜)
- [转]软件开发规范—模块开发卷宗(GB8567——88)
- Linux关于终端的基本概念汇总(tty/pty)(转)
- (转)DLL中导出函数的两种方式(dllexport与.def文件)
- 安装maven,eclipse及eclipse配置maven
- python2解决中文问题(无论是注释还是代码含有中文)
- 【好】strong-password-checker,我自己做出来的:)
- JS函数节流和函数防抖问题分析
- javat Itext实践 pdf