一个关于类继承和vector的有关问题
一个关于类继承和vector的问题,高手请进
高手帮我看一下以下的代码为什么不行,是不是我的方法有错,是的话,有没有别的办法能实现我想要的功能的,谢谢啦
#include <iostream>
#include <vector>
using namespace std;
class A
{
public:
A(){}
virtual void Show() = 0;
};
class B : public A
{
public:
B(){}
virtual void Show()
{
cout < < "B ";
}
};
class C : public A
{
public:
C(){}
virtual void Show()
{
cout < < "C ";
}
};
int main()
{
vector <A> vec;
B b;
C c;
vec.push_back(b);
vec.push_back(c);
vector <A> ::iterator it;
it = vec.begin();
while (it != vec.end())
{
(*it).Show();
it++;
}
return 0;
}
------解决方案--------------------
很明显 造成了“切割”
vector应该存放的基类的指针类型 而不是 基类这种类型。
------解决方案--------------------
A有纯虚函数是抽象类。不能被实例化.改用指针吧。
vector <A*> vec;
...
vec.push_back(&b);
vec.push_back(&c);
vector <A*> ::iterator it
...
(*it)-> Show();
...
------解决方案--------------------
刚想说,无奈楼上说的太对了
高手帮我看一下以下的代码为什么不行,是不是我的方法有错,是的话,有没有别的办法能实现我想要的功能的,谢谢啦
#include <iostream>
#include <vector>
using namespace std;
class A
{
public:
A(){}
virtual void Show() = 0;
};
class B : public A
{
public:
B(){}
virtual void Show()
{
cout < < "B ";
}
};
class C : public A
{
public:
C(){}
virtual void Show()
{
cout < < "C ";
}
};
int main()
{
vector <A> vec;
B b;
C c;
vec.push_back(b);
vec.push_back(c);
vector <A> ::iterator it;
it = vec.begin();
while (it != vec.end())
{
(*it).Show();
it++;
}
return 0;
}
------解决方案--------------------
很明显 造成了“切割”
vector应该存放的基类的指针类型 而不是 基类这种类型。
------解决方案--------------------
A有纯虚函数是抽象类。不能被实例化.改用指针吧。
vector <A*> vec;
...
vec.push_back(&b);
vec.push_back(&c);
vector <A*> ::iterator it
...
(*it)-> Show();
...
------解决方案--------------------
刚想说,无奈楼上说的太对了