当一个类多继承了2个类,如类C,继承了类A和B。创建了很多类C放到list<A*>这种容器中,一个list,保存的是类A的指针。

如果用类A直接转成类B,这个类B是无法得到类C中继承下来的类B的数据。

因为类A和类B没有半毛钱关系。

具体例子如下:

代码如下:

#include <iostream>
#include <list>
using namespace std;class MyBase{
public:int getMyValue(){ return m_myValue; }void setMyValue(int myValue){ m_myValue = myValue; }private:int m_myValue;
};class MyItem{
public:void myPrint(){ cout << "MyItem Print Called" << endl; }
};class MyClass :public MyBase,MyItem{
public:void printf(){ cout << "MyValue:" << MyBase::getMyValue() << endl; }
};void main(){MyClass *myClass1 = new MyClass;MyClass *myClass2 = new MyClass;MyClass *myClass3 = new MyClass;myClass1->setMyValue(1);myClass2->setMyValue(2);myClass3->setMyValue(3);list<MyItem *> myList;myList.push_back((MyItem *)myClass1);myList.push_back((MyItem *)myClass2);myList.push_back((MyItem *)myClass3);list<MyItem *>::iterator iter;for (iter = myList.begin(); iter != myList.end(); iter++){cout << "把MyItem转成MyBase:" <<((MyBase*)(*iter))->getMyValue() << endl;MyClass *my = ((MyClass*)(*iter));/*下断点看看变量*/MyBase *a = ((MyBase*)(*iter));MyBase *b = ((MyBase*)my);/*下断点看看变量*/cout << "把MyItem转成MyClass:" <<my->getMyValue() << endl;cout << "把MyClass转成MyBase:" <<((MyBase*)my)->getMyValue() << endl;}getchar();
}

运行截图如下:

下一个断点,看看他们的地址,更加能得到结果:

C++工作笔记-多继承下的一个大坑相关推荐

  1. C++|Qt工作笔记-Windows平台下的句柄与Qt中QWindow::winId()以及 QPlatformWindow::handle的区别与联系

    具体是这样的,当创建一个Qt窗口,调用window->winId()与window->handle()后,运行截图如下: 此时可以看到,这个窗口的handle为0x1e78de38 win ...

  2. C++工作笔记-对继承的进一步认识

    这篇博文将说明我对继承的进一步理解. 比如在图形碰撞的时候,如果能让他继承一个类,那个类设置一个flag,就可以对不同的图形进行不同的碰撞分析,那么这里就可以用父类指针,去指向子类,然后读取子类里面和 ...

  3. Linux工作笔记031---Centos7.3下安装tomcat

    JAVA技术交流QQ群:170933152 后来发现安装很简单,把安装包,解压,然后 启动就可以了,如果需要改端口,就去conf中的server.xml中去改一下就可以了 下面的步骤有点啰嗦 ---- ...

  4. Linux|Qt工作笔记-linux系统下安装qt4.5.3版本的详细步骤

    原文地址如下: https://blog.csdn.net/AmyAndTommy/article/details/81901005 第一步:下载qt-all-opensource-src-4.5.3 ...

  5. TensorFlow工作笔记001---Centos7.3下安装TensorFlow最新版本,基于python2.7.5的,没有编译TensorFlow的源码

    技术交流QQ群[JAVA,.NET,BigData,AI]:170933152 Centos7.3下安装TensorFlow最新版本,基于python2.7.5的,没有编译TensorFlow的源码, ...

  6. 数据库工作笔记011---Centos7.3下切换mysql数据库的存储位置_挂盘_目录挂载_挂载某个目录到某个设备下

    JAVA技术交流QQ群:170933152 大体写一下过程: 首先如果要切换的位置,还没有挂载上,那么就执行:mount /dev/sdb1 /data 进行挂载 挂载后可以通过df,命令查看Linu ...

  7. Qt工作笔记-QListWidget鼠标拖动,一个到另一个,并遍历

    运行截图如下: 源代码很简单,如下: widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include < ...

  8. Linux工作笔记037---Centos8.2下安装mysql_测试通过_注意这里安装8.0.22版本的_8.0以后的版本有需要注意的地方_跟7.0之前的版本不一样

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 注意如果有错误: 可以通过查看: /usr/local/mysql/data 中有个.err文件, ...

  9. STM32工作笔记0075---UCOSIII任务管理(下)

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 去看一下代码 可以看到

最新文章

  1. Map再整理,从底层源码探究HashMap
  2. c语言 char 语句,C语言是或否如果语句带有char?
  3. 4、数据类型二:Lists
  4. esp8266设置sta失败_使用NodeMCU_ESP8266驱动OLED
  5. C C++编程产生指定范围内的随机数
  6. 12款优秀的 JavaScript 日历和时间选择控件
  7. 我今年89岁,刚刚拿了个物理学博士学位
  8. 进程在linux系统中原理,Linux系统原理知识 进程切换的概念介绍
  9. 华为P50 Pro渲染图再曝光:液态镜头、四曲面屏很吸睛
  10. mysql binary 查询_MYSQL的binary解决mysql数据大小写敏感问题 《转载》
  11. 动手学深度学习 环境安装
  12. H3C交换机SSH配置完全攻略
  13. 管家婆过账服务器无响应,管家婆软件分享辉煌版常见问题处理
  14. Java Calendar,Date,DateFormat,TimeZone,Locale等时间相关内容的认知和使用(2) 自己封装的Calendar接口
  15. WPCMS插件自动采集发布文章WordPress插件
  16. STM32 IO 简介
  17. 微信朋友圈信息流可能采用算法排序吗?
  18. python每日学4:vscode的安装与基础使用
  19. Android GLSurfaceView详解
  20. 手机CMWAP上网设置(完全版)

热门文章

  1. 一看就会的 GitHub 骚操作,让你看上去像一位开源大佬
  2. 程序员工资那么高,却不知道怎么花?程序员花钱指南了解一下!
  3. 智慧水务建设纪实:数字可视化大屏+智能AI,凭啥这么强?
  4. 我最开始学dancing link的HTML5的时候
  5. 编程语言五花八门,哪种可以让程序员赚到更多钱?
  6. 2020年7大技术趋势
  7. 北妈每日一学:ES6 之 模块化-重要!
  8. 程序员最核心的竞争力是什么?
  9. python保存rtmp流_ffmpeg 推送、保存rtmp 流命令
  10. 国自然和毕业论文的流程图用这个格式导入Word可无限放大