父类指针强制转换为子类指针
来源:互联网 发布:mysql修复表命令 编辑:程序博客网 时间:2024/05/17 08:47
-----Singleton.h
#include<iostream>using namespace std;class B{public:virtual void fun(){printf("fun in B\n");}void b1(){printf("b1 in B\n");}};class D : public B{public:D(){m_d1 =10;}void fun(){printf("fun in D\n");}void b1(){printf("b1 in D\n");}int m_d1;};
-----Main.cpp
#include<iostream>#include"Singleton.h"int main(){B *pb1 = new B;D *pd1 = (D*)pb1;pd1->fun();//问题1,为什么是 fun in Bpd1->b1();//问题2,为什么是 b1 in Dprintf("%d\n",pd1->m_d1);////问题3,为什么是 乱码 ;int a;((B*)(&a))->b1();//问题4 ,怎么会成功?B* 强转指定要调用B类的b1()吗?强转内存地址有什么变化吗?system("PAUSE");}
问题一:
因为new出的对象是B,所以该对象虚函数表中fun未被D中的fun覆盖,于是" fun in B"
问题二:
因为pd1指针是指向D的,所以调用b1,是去D的公共函数区调用,于是“ fun in D"
问题三:
m_d1是数据,pd1按照D的方式去取B对象的数据,而B没有这个数据,于是访问未知地址,得到乱码
问题四:
同二,类的函数是放在公共函数区的,所以哪怕不是类对象,也可以成功调用
画了个图,辅助上面的思考:可以看出,调用函数时是根据指针类型(哪怕是强转),去该类的公共函数区调用的。
阅读全文
0 0
- 父类指针强制转换为子类指针
- 父类指针向子类指针的强制类型转换
- 父类指针向子类指针的强制类型转换
- 子类指针不能转换为父类指针???
- 基类指针转换为子类指针,子类指针转换为基类指针
- 基类指针转换为子类指针,子类指针转换为基类指针(转载)
- c++ 父类指针转换为子类指针后调用子类的成员函数问题
- java 父类强制转换为子类
- 使用dynamic_cast强制将基类指针转换成子类指针
- 父类子类指针相互转换问题
- 父类子类指针相互转换问题
- c++父类指针和子类指针相转换:
- 父类指针,子类指针
- 使用dynamic_cast将子类转换为父类指针时,结果可能为NULL
- C++父类强制转换为子类用法
- 父类对象到底能不能强制转换为子类对象
- 将指针强制类型转换为函数指针
- 指针和指针强制转换
- 联合体(union)的使用方法及其本质
- ZK框架的分析与应用
- mysql游标
- 算法系列——Copy List with Random Pointer
- 第八届福建省大学生程序设计竞赛 FZU 2277 Change (dfs序+树状数组)
- 父类指针强制转换为子类指针
- 同步与异步
- c++构造函数,函数重载,复合类,类和对象
- python中sqlite3对数据库的增删改查
- android按分辨率压缩图片
- 页面处理特殊字符传输
- 多线程处理list业务逻辑(大数量)
- android自定义View,区域热力地图(具备每个省份的点击接口)
- java家狗师必备技能