WEB开发网
开发学院软件开发VC 再谈“在STL列表(Lists)中插入不同类型的对象”... 阅读

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

 2010-07-15 20:44:10 来源:WEB开发网   
核心提示:看到贵网站上的一篇文章:“在STL列表(Lists)中插入不同类型的对象”,我觉得该文回答还没有指出问题的本质,再谈“在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++;
  }
}
//程序结束

Tags:STL 列表 Lists

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接