现在的位置: 首页 > 综合 > 正文

再谈“在STL列表(Lists)中插入不同类型的对象”

2019年03月30日 ⁄ 综合 ⁄ 共 1634字 ⁄ 字号 评论关闭

再谈“在STL列表(Lists)中插入不同类型的对象”

作者:周公建

    看到贵网站上的一篇文章:“在STL列表(Lists)中插入不同类型的对象”。我觉得该文回答还没有指出问题的本质,所以本人提出我的观点,恳请指正。本人认为,错误产生的原因在于指针转化过程中,程序没有指出该指针最初的原型,或者说,由于未找到正确的子类函数地址才发生调用错误的,本人原代码如下:用Dev-cpp的g++编译通过。

#include<iostream>
#include<algorithm>
#include <vector>
#include <string>

/**
 * 父类:synObject
 */

class synObject {
 public :
	synObject();
 	string GetClass();
 	string className;
};

synObject::synObject()
{
	className = "synObject";
}

string synObject::GetClass()
{
	return className;
}


/**
 * 子类1:synPin
 */
 
class synPin : public synObject {
	string pin;
public :
 	synPin();
	void   SetPin(string Pin);
 	string GetPin();
private:
};

synPin::synPin()
{
	className = "synPin";
}

void synPin::SetPin(string Pin)
{
	pin = Pin;
}

string synPin::GetPin()
{
	return pin;
}

/**
 * 子类2:synCell
 */
 
class synCell : public synObject {
	string cell;
public :
	synCell();
 	void   SetCell(string Cell);
 	string GetCell();
private:
};

synCell::synCell()
{
	className = "synCell";
}
void synCell::SetCell(string Cell)
{
	cell = Cell;
}

string synCell::GetCell()
{
	return cell;
}

/**
 * 系统运行主程序
 */
 
int main()
{
	file://生成对象
	synObject * pMyObject;
	pMyObject = new synObject;

	synPin * pMyPin;
	pMyPin = new synPin;
	pMyPin->SetPin("myPin");

	synCell * pMyCell;
	pMyCell = new synCell;
	pMyCell->SetCell("myCell");
 
	//插入对象
	vector<synObject *> MyVector;
	MyVector.empty();
	MyVector.push_back(pMyObject);
	MyVector.push_back(pMyPin);
	MyVector.push_back(pMyCell);

	//调用对象
	vector<synObject *>::iterator ThisVector=MyVector.begin();
	cout<<"Program begin here:"<<endl;
	while( ThisVector != MyVector.end() )
	{
		cout << (**ThisVector).GetClass() << endl ;
		
		if ( (**ThisVector).GetClass().compare("synCell") == 0) 
		{
			cout << (**((synCell**)ThisVector)).GetCell() << endl ;
		}
		
		if ( (**ThisVector).GetClass().compare("synPin") == 0) 
		{
			cout << (**(synPin**)ThisVector).GetPin() << endl ;
		}
		ThisVector++;
	}
}
//程序结束
 

抱歉!评论已关闭.