求救,list里保存对象?

wungyong025 2008-11-07 10:54:30
基类
class A
{
public:
A();
virtual ~A();
virtual void dosomething(unsigned long t) = 0;

A* nextT;
};
类B,C,D...都从A类派生,我想将B,C,D...对象放入链表中,以便实现dosomething()不同的结果,我现在想知道的是:
1,我在H类中如何通过调用 void H::Add(A* p)将B,C,D类的对象添加到list中(或者自己实现的链表?)。
2,如果我将B,C,D...等对象加入链表后,我怎样才能判断B,C,D...对象已经加入到链表中呢?
谢谢赐教!
...全文
149 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wungyong025 2008-11-07
  • 打赏
  • 举报
回复
给分
wungyong025 2008-11-07
  • 打赏
  • 举报
回复
谢谢!第一个问题解决了!
lann64 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wungyong025 的回复:]
刚才也许没有说清楚,我通过void H::Add(A* p)将B,C,D...等的对象加入链表中,按照楼上的方法是
list <A*> alist;
A* pb = new B();
A* pc = new C();
alist.push_back(pb);
alist.push_back(pc);
现在的问题是我事先不知道你要加那个对象放入链表。所以也就new不了具体的类了。
[/Quote]
这个要事先知道干嘛?
你调用Add(A* p)的时候,传的实参应该已经指向了你要加的对象了吧?
alist.push_back(p)不就行了。

你总有一个地方生成BCD的对象吧,生成时就用A*指向它,以后就操作A*就行了。
太乙 2008-11-07
  • 打赏
  • 举报
回复
多态~~
yuzy 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wungyong025 的回复:]
刚才也许没有说清楚,我通过void H::Add(A* p)将B,C,D...等的对象加入链表中,按照楼上的方法是
list <A*> alist;
A* pb = new B();
A* pc = new C();
alist.push_back(pb);
alist.push_back(pc);
现在的问题是我事先不知道你要加那个对象放入链表。所以也就new不了具体的类了。
[/Quote]
无奈~~~~,你不用知道是那个类!new?是提前声明好了对象就可以。
虽然我好久没有用C++,但是.........................
wungyong025 2008-11-07
  • 打赏
  • 举报
回复
刚才也许没有说清楚,我通过void H::Add(A* p)将B,C,D...等的对象加入链表中,按照楼上的方法是
list<A*> alist;
A* pb = new B();
A* pc = new C();
alist.push_back(pb);
alist.push_back(pc);
现在的问题是我事先不知道你要加那个对象放入链表。所以也就new不了具体的类了。
liumingrong 2008-11-07
  • 打赏
  • 举报
回复
你也不需要知道是BCD中的那个,只要你传入它们的指针就可以了
wungyong025 2008-11-07
  • 打赏
  • 举报
回复
感谢回复,关键问题是这样的,void H::Add(A* p)中p指向的对象B,C,D...我事先并不知道是那个啊,所以也就没有办法用A的指针指向它了。
liumingrong 2008-11-07
  • 打赏
  • 举报
回复
保存A*类型的指针,例如
list<A*> alist;
A* pb = new B();
A* pc = new C();
alist.push_back(pb);
alist.push_back(pc);
yuzy 2008-11-07
  • 打赏
  • 举报
回复
定义B,C,D类的对象,然后定义一个A类的指针,分别指向B,C,D类的对象,
把这个指针添加到链表就应该能解决你的第一个问题。
第二个问题应该通过你实现的不同dosomething函数来判断呀!
我现在用的是C,C++好久没用但是应该差不多。
yh4130a 2008-11-07
  • 打赏
  • 举报
回复

class A
{
public:
void Show(std::string str)
{
std::cout<<str<<std::endl;
};
bool operator == (const A& a)
{
if(this == &a) return true;
return false;
};
};
class B : public A{};
class C : public A{};
class H
{
private:
std::list<A*> list;
public:
void Add(A* a)
{
if(std::find(this->list.begin(), this->list.end(), a) == this->list.end())
{
this->list.push_back(a);
}
}
void Show(std::string str)
{
std::list<A*>::iterator it = this->list.begin();
while(it != this->list.end())
{
(*it)->Show(str);
it++;
}
}
};
int main()
{
std::string str;
std::cin>>str;

B* b = new B();
C* c = new C();
H h;
h.Add(b);
h.Add(c);
h.Add(b);
h.Add(b);
h.Add(b);
h.Show(str);
delete b;
delete c;

std::cin>>str;
return 0;
}
内容概要:本文详细介绍了利用Simulink进行变压器开路试验的电路连接配置与仿真实现方法,重点在于通过仿真手段还原实际电力系统中变压器在空载条件下的电气特性,从而深入理解其工作原理与性能表现。文章作为电力系统仿真系列研究的一部分,系统阐述了从电路模型搭建、参数设定、仿真运行到结果分析的完整流程,突出展示了MATLAB/Simulink在电力设备建模与教学科研中的强大功能与应用价值。; 适合人群:具备电力系统基础知识,熟悉MATLAB/Simulink仿真环境,从事电气工程、自动化及相关领域的研发人员,以及高年级本科生和研究生。; 使用场景及目标:①掌握变压器开路试验的基本原理与Simulink仿真建模的具体步骤;②通过仿真实验深入理解空载电流、铁芯损耗及励磁特性等关键参数的物理意义;③为后续开展变压器短路试验、暂态过程分析以及其他电力设备的仿真研究奠定理论与实践基础。; 阅读建议:建议结合Simulink软件动手实践,逐步构建并调试电路模型,重点关注各元件参数的设置方法与测量模块的应用技巧,同时推荐参考文中提及的其他相关仿真案例进行拓展学习,以全面提升对电力系统仿真实践的整体认知与操作能力。

65,211

社区成员

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

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