免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1144 | 回复: 4
打印 上一主题 下一主题

STL中list的问题(较难),请高手指教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-25 15:02 |只看该作者 |倒序浏览
     高手你们好,小弟想请教如下问题:
我想用STL中的list来存放各种不同的数据类型,我想这样:
定义基类Base
类型Type1,Type2,Type3是由Base派生来的子类。
定义:
list<Base>; myList ;
然后:
Type1 aa= new Type1 ( 11 ) ;
Type2 bb = new Type2 ( "bb" ) ;
怎么才能把这两个数据插入到myList中去呢?
myList.push_back ( aa ) ;
myLIst.push_back ( bb ) ;
是不行的,总不能我自己再定义一个list模板用指针来操作吧,
想用STL中的list 呀。
help!

论坛徽章:
0
2 [报告]
发表于 2004-11-25 15:38 |只看该作者

STL中list的问题(较难),请高手指教

>;>;Type1 aa= new Type1 ( 11 ) ;
>;>;Type2 bb = new Type2 ( "bb" ) ;

看看aa和bb是对象还是指针

论坛徽章:
0
3 [报告]
发表于 2004-11-25 16:24 |只看该作者

STL中list的问题(较难),请高手指教

我猜你是想用虚函数多态来写程序,就写了个简单的例子,看看container中的元素应该怎么使用。

  1.       1 #include <iostream>;
  2.       2 #include <list>;
  3.       3 using namespace std;
  4.       4
  5.       5 class Base
  6.       6 {
  7.       7 private:
  8.       8
  9.       9 public:
  10.      10         virtual void Print(){
  11.      11                 cout<<"function Print() of class Base"<<endl;
  12.      12         }
  13.      13 };
  14.      14
  15.      15 class Type1:public Base
  16.      16 {
  17.      17 private:
  18.      18
  19.      19 public:
  20.      20         void Print(){
  21.      21                 cout<<"function Print() of class Type1"<<endl;
  22.      22         }
  23.      23 };
  24.      24
  25.      25 class Type2:public Type1
  26.      26 {
  27.      27 private:
  28.      28
  29.      29 public:
  30.      30         void Print(){
  31.      31                 cout<<"function Printf of class Type2"<<endl;
  32.      32         }
  33.      33 };
  34.      34
  35.      35 int main(int argc,char** argv)
  36.      36 {
  37.      37         list<Base *>; ls;
  38.      38         Base b1;
  39.      39         Type1 t1;
  40.      40         Type2 t2;
  41.      41
  42.      42         ls.push_back(&b1);
  43.      43         ls.push_back(&t1);
  44.      44         ls.push_back(&t2);
  45.      45
  46.      46         for(list<Base *>;::iterator itr = ls.begin();
  47.      47                         itr != ls.end(); itr++)
  48.      48                 (*itr)->;Print();
  49.      49
  50.      50         return 0;
  51.      51 }
  52.      52
复制代码

论坛徽章:
0
4 [报告]
发表于 2004-11-25 21:59 |只看该作者

STL中list的问题(较难),请高手指教

3楼的高手,可以不用指针么?直接放对象不行么?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-11-25 22:09 |只看该作者

STL中list的问题(较难),请高手指教

帮三楼的高手回答一下.
不能直接放不是由同一个类型产生出来的对象.或者说你可以直接放基类对象,但STL container又是具有值语义的,不具引用语义,当然你可以用smart point,一种指针的包装而矣,,不小心会出问题.而值语义就直接导致对象切割.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP