当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 再谈“在STL列表(Lists)中插入不同类型的对象”

VC++
透明窗体的又一实现
橡皮区矩形 CRectTracker C# 实现
Visual Basic .NET 中多 Windows 窗体的同步
轻松实现类 MSDN 2002 界面(二)
轻松实现类 MSDN 2002 界面
数据库开发之窗体编程
一个打印报表的简单的类
SDK 程序使用SkinMagic工具包换皮肤
Windows SDK笔记(七):创建MDI窗口
Windows SDK笔记(六):使用对话框资源建立窗口
Windows SDK笔记(五):非模式对话框
Windows SDK笔记(四):模式对话框
也谈如何隐藏显示在任务栏中的对话框程序
一个托盘程序演示 -闹钟 Alert
think window procedure
再谈 CFileDialog 对话框的定制
获得 Win32 窗口句柄的更好的方法
个人考勤软件开发实例配套代码 2.1版(Update)
介绍一个操作DHTML表格的C++对象
Windows资源管理器Web视图界面

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 71 ::
收藏到网摘: n/a

再谈“在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++;	}}//程序结束