您现在的位置:中国下载站学院中心网络编程CC++教程 → 文章列表

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

作者:佚名  来源:不详  发布时间:2007-4-3 23:36:52   

减小字体 增大字体

 
 

  [问题]:

  我的目的是创建一个不同类型对象的容器。首先从同一个类派生了所有需要的类,然后将它们压入容器中。请看下列代码: synObject为基类,synPin 和 synPin 是从基类中派生的子类,class synObject {
public :
synObject();
string GetClass();
string className;
};
synObject::synObject()
{
className = "synObject";
}
string synObject::GetClass()
{
return className;
}
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;
}
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;
}
现在将这些类压入向量列表。synObject * pMyObject;
pMyObject = new synObject;
synPin * pMyPin;
pMyPin = new synPin;
(*pMyPin).SetPin("myPin");
synCell * pMyCell;
pMyCell = new synCell;
(*pMyCell).SetCell("myCell");
vector<synObject *> MyVector;
vector<synObject *>::iterator ThisVector;
MyVector.empty();
MyVector.push_back(pMyObject);
MyVector.push_back(pMyPin);
MyVector.push_back(pMyCell);
当遍历向量时,我只能访问公共的(基类)方法:不能访问派生的方法。for ( ThisVector = MyVector.begin(); 
    ThisVector != MyVector.end();
    ThisVector++
   )
{
 cout << (**ThisVector).GetClass() << endl ;
 if ( (**ThisVector).GetClass().compare("synClass") == 0) {
  cout << (**ThisVector).GetCell() << endl ;
 }
 if ( (**ThisVector).GetClass().compare("synPin") == 0) {
  cout << (**ThisVector).GetPin() << endl ;
 }
}

[责任编辑:cndownzcom]

  [解答]:

  为了实现动态绑定,你需要使用基类的地址或指针。如果你使用的是一个基类指针,就不要用“.”符号来访问成员函数,而要用“->”,也就是说用    pMyCell->SetCell("myCell");代替    (*pMyCell).SetCell("myCell");更重要的是,不要使用迭代器访问向量元素,而要使用重载的“[]”操作符vector < synObject * >::iterator ThisVector= MyVector.begin();
for (int i =0; ThisVector!=MyVector.end(); ++i)
{
 cout << MyVector[i]->GetClass();
}
另外,我对你的代码有一些风格上的建议,这很重要:

  首先,我注意到你的类没有声明任何虚拟成员,甚至连虚析构器都没有,这有可能导致未定义的行为。这使我怀疑使用继承特性的意义。此外,你不应该用传值的方式从成员函数返回串对象。而是应该返回常量数据的地址。

  其次,记住要用delete销毁分配的对象。

[责任编辑:cndownzcom]

[上一页][1][2]

在百度中搜索更多在STL列表(Lists)中插入不同类型的对象相关网页 转贴于:中国下载站

  • 上一篇文章:关于初始化C++类成员
  • 下一篇文章:创建和访问环境变量
  • 阅读统计:[]
  • 中国下载站】【设为主页】【收藏本页】【打印本文】【回到顶部】【关闭此页

    相关文章
    文章评论(评论内容只代表网友观点,与本站立场无关!)

    用户名: 查看更多评论

    分 值:100分 85分 70分 55分 40分 25分 10分 0分

    内 容:

             (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码


    设为首页 - 关于我们 - 广告服务 - 网站地图 - 加入收藏 - 网站声明 - 网站帮助 - 友情链接

    • Copyright (C) 2006-2008 www.cndownz.com All Rights Reserved.
      中国下载站 版权所有. 粤ICP备05141802号. 对本站有任何建议、意见或投诉,请来信:cndownzcom@yahoo.com.cn.
      喜欢中国下载站(cndownz.com),请把中国下载站(cndownz.com)告诉你QQ上的5位好友,多谢支持!