当一个类多继承了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(); }
运行截图如下:
下一个断点,看看他们的地址,更加能得到结果: