初学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)
};
会试图实例化该变量
所以造成错误