C++ 继承关系中的指针转换

[复制链接]
查看11 | 回复2 | 2012-2-7 10:13:44 | 显示全部楼层 |阅读模式
怎么说呢,这个应该和多重继承有关系Person* pPersonA = (Person*)pHuman ;Person* pPersonB = (Person*)(Man*)pHuman ;A的转换是由Human到Personal,Human和Person相当于“兄弟”关系,是不应该转换的其实这段简单代码,直接换成Man继承Person,Person继承Human就可以了。尽量少用多重继承,这会带来很多不良的问题,这也是为什么现在常用的OO语言中只有C++支持多重继承,其他语言java,.net,ptyon,ruby都不支持,不是因为c++高级点,是因为当时发展过程中人们对OO和软工的认识还不够充分,后来证明这个特性是比较糟糕的而已。(...
回复

使用道具 举报

千问 | 2012-2-7 10:13:44 | 显示全部楼层
Human和Person之间没有继承关系 所以Person* pPersonA = (Person*)pHuman ;是不对的 把这几个指针的值都打出来就知道了printf("M %p H %p A %p B %p\n", pMan, pHuman, pPersonA, pPersonB);M 00384E70 H 00384E70 A 0038...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行