程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 再談“在STL列表(Lists)中插入不同類型的對象”

再談“在STL列表(Lists)中插入不同類型的對象”

編輯:關於VC++

看到貴網站上的一篇文章:“在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++;
  }
}
//程序結束

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved