首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学stl,有点有关问题!

2012-02-19 
初学stl,有点问题!!!structA{virtualvoiddisplay(){cout AAA endl}}structB:publicA{voiddisp

初学stl,有点问题!!!
struct   A
{


virtual   void   display(){cout < < "AAA " < <endl;}
};
struct   B   :public   A
{
void   display()
{
cout < < "BBB " < <endl;
}
};
struct   C:public   A
{
void   display()
{
cout < < "CCC " < <endl;
}
}

  main()
  {

B   b;
C   c;
list <A>   kl;
list <A> ::iterator   pos;
                  kl.push_back(b);
kl.push_back(c);
pos=kl.begin();
pos-> display();
(++pos)-> display();

}

程序输出的是:     AAA
                                AAA

初学stl,有很多不懂。想问一下这是什么原因?还有要实现输出的是   BBB   和   CCC     应该怎么改。

在线等~~~~~~~~~~~~~~~

[解决办法]
在kl里存b,c,相当于:
kl[0] = (A)b;
kl[1] = (A)c;
把B,C转换为A了.

正确写法是:
main()
{

B b;
C c;
list <A*> kl;
list <A*> ::iterator pos;
kl.push_back(&b);
kl.push_back(&c);
pos=kl.begin();
(*pos)-> display();
(*(++pos))-> display();

}

[解决办法]
这样就可以实现输出 BBB CCC
#include <iostream>
#include <list>
using namespace std;
class A
{
public:
virtual void display(){
cout < < "AAA " < <endl;
}
};
class B :public A
{
public:
void display()
{
cout < < "BBB " < <endl;
}
};
class C:public A
{
public:
void display()
{
cout < < "CCC " < <endl;
}
};

void main()
{

B b;
C c;
list <A*> kl;


kl.push_back(&b);
kl.push_back(&c);

list <A*> ::iterator pos = kl.begin();

(*pos)-> display();
pos++;
(*pos)-> display();



}
[解决办法]
程序的关键在

list <BASE *> kl;
如果直接使用

list <BASE> 由于BASE是虚函数 不允许直接实例化
而在list <BASE> 的构造函数

template <class _Tp>
struct _List_node : public _List_node_base {
_Tp _M_data;
__TRIVIAL_STUFF(_List_node)
};
会试图实例化该变量

所以造成错误

热点排行
Bad Request.