你的位置:睿鑫网络 >> 编程 >> 编程语言 >> VC++ >> 详细内容 在线投稿

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

排行榜 收藏 打印 发给朋友 举报 来源: 网络   发布者:未知
热度0票  浏览0次 时间:2010年7月19日 18:31

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

#include

#include

#include

#include

/**

* 父类: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 MyVector;

  MyVector.empty();

  MyVector.push_back(pMyObject);

  MyVector.push_back(pMyPin);

  MyVector.push_back(pMyCell);

  //调用对象

  vector::iterator ThisVector=MyVector.begin();

  cout<<"Program begin here:"<

  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++;

  }

}

//程序结束

顶:0 踩:0
对本文中的事件或人物打分:
当前平均分:0 (0次打分)
对本篇资讯内容的质量打分:
当前平均分:0 (0次打分)
上一篇 下一篇

网络资源