还是vector问题,继承类在vector存储后读取之后的函数表现

thinkers 2005-02-06 11:04:19
我希望 va[0].g(); 能调用B::g(); 但他调用的A::g();有什么办法让他调用继承类的g()?
我不想在类中显式增加类型标志
高人帮忙
// vectortest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <vector>

using namespace std;
class A
{
public:
A(){};
~A(){};
virtual void g(){cout<<"in A"<<endl;};
};

class B: public A
{
public :
B(){};
~B(){};
virtual void g(){ cout<<"in B"<<endl;};
};
class C: public A
{
public :
C(){};
~C(){};
virtual void g(){ cout<<"in C"<<endl;};
};

vector <A> va;

int main()
{
B b0,b1,b2;
C c0,c1;
va.push_back(b0);
va.push_back(b1);
va.push_back(b2);


va.push_back(c0);
va.push_back(c1);

b0.g(); //输出 "in B"
b1.g(); //输出 "in B"
b2.g(); //输出 "in B"

c0.g(); //输出 "in C"
c1.g(); //输出 "in C"

va[0].g(); //输出 "in A",希望 "in B"
va[1].g(); //输出 "in A",希望 "in B"
va[2].g(); //输出 "in A",希望 "in B"
va[3].g(); //输出 "in A",希望 "in C"
va[4].g(); //输出 "in A",希望 "in C"
}


...全文
91 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dong 2005-02-06
  • 打赏
  • 举报
回复
vector <A*> va;
fangrk 2005-02-06
  • 打赏
  • 举报
回复
比如
template<class T>
struct AutoDelete
{
T m_real;
~AutoClear()
{
for(T::iterator beg_iter=m_real.begin(),end_iter=m_real.end();beg_iter!=end_iter;++beg_iter) delete *beg_iter;
}
};

AutoDelete< vector<A*> > Test;
Test.m_real.push_back(new A);
Test.m_real.push_back(new B);
...
fangrk 2005-02-06
  • 打赏
  • 举报
回复
要么引用,要么指针,不能直接存储对象。

动态存储考虑到对象释放的话,可以考虑自己简单包装一下,析构函数负责清理工作
thinkers 2005-02-06
  • 打赏
  • 举报
回复
我的object是动态生成的,巨多,不是没考虑指针,但用指针的话就要
考虑对象释放的问题了,所以想直接存储实例。要是有办法解决这个问题
就简单了。

各位高人帮我想想办法。vector可以存储对象实例,为什么就不能解决对象
取出时的多态问题呢?
FireEmissary 2005-02-06
  • 打赏
  • 举报
回复
又被抢啦...
fangrk 2005-02-06
  • 打赏
  • 举报
回复
vector <A*> va;

va.push_back(&b0);
va.push_back(&b1);
va.push_back(&b2);

va.push_back(&c0);
va.push_back(&c1);
oo 2005-02-06
  • 打赏
  • 举报
回复
这样有问题的,object被截断了。

你想要这种效果的话,应该在vector里放指针

vector <A*> va;
thinkers 2005-02-06
  • 打赏
  • 举报
回复
good work

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧