欢迎访问:常州市武进区嘉泽中心小学网站 !今天是:
栏目列表
您现在的位置是:首页>>教师>>计算机技术>>程序设计>>一般性编程问题>>STL>>文章内容
再谈“在STL列表(Lists)中插入不同类型的对象”
发布时间:2008-11-20   点击:   来源:本站原创   录入者:佚名
" width="21" height="15" align="absmiddle">

再谈“在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++;

	}

}

//程序结束

      



附件:
    关闭窗口
    打印文档
    账号登录
    保持登录 忘记密码?
    账号与武进教师培训平台同步