C++工作笔记-多继承下的一个大坑
当一个类多继承了2个类,如类C,继承了类A和B。创建了很多类C放到list<A*>这种容器中,一个list,保存的是类A的指针。如果用类A直接转成类B,这个类B是无法得到类C中继承下来的类B的数据。因为类A和类B没有半毛钱关系。具体例子如下:代码如下:#include <iostream>#include <list&g
·
当一个类多继承了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();
}
运行截图如下:
下一个断点,看看他们的地址,更加能得到结果:
更多推荐
已为社区贡献20条内容
所有评论(0)