高手快帮忙啊

34539890 2004-05-05 03:24:36
我将我自己设计的两个不同类的实例都存进了CObArray,我现在要将他们读出来进行各自的Draw()函数,但CObArray返回的只是一个CObject基类指针,要进行强制转换,但怎么转换成各自的类型呢?
...全文
33 11 点赞 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
菜牛 2004-05-08
父类的虚函数成员没有实例,只是定义了指向子类实现了虚函数的指针。
  • 打赏
  • 举报
回复
34539890 2004-05-08
解决了,通过多态,谢谢大家了
不过小弟我有一点疑问
int main(int argc, char* argv[])
{
CBase* pFoo = new CA();
pFoo->Draw();//这里先调用父类的draw,而后调用子类的draw,是吗?
delete pFoo;
}
  • 打赏
  • 举报
回复
ygzdev 2004-05-08
楼上的m_nbutton和m_nframe有关系吗?
不管怎么样,要么强制指针转换,要么多态,要么自己编写函数(获取类名,不同的类名调用不同的函数)
  • 打赏
  • 举报
回复
34539890 2004-05-08
是这样的,我有两个类:TurnButton和Frame,他们是我自己编的com控件,我在Document中实例化几个对象,并无规则的存入CObArray中,现在要在view中显示界面,即要调用各自的Draw()函数
for(int i=0;i<pDoc->Get_array()->GetSize();i++)
{
TurnButton *m_nbutton=(TurnButton *)pDoc->Get_array()->GetAt(i);
m_nframe->Draw(pDC);//调用相关的draw函数
}
但此时只是调用TurnButton的Draw()函数,我想写一个通用的,而不光是TurnButton或者是Frame一个的Draw()函数,怎么实现呢?
  • 打赏
  • 举报
回复
zxs790501 2004-05-07
像一楼那样,用虚函数来实现多态,这样可以避免强制类型转换

(基类->派生类 的转换会出现切割问题,要避免)
  • 打赏
  • 举报
回复
mjk 2004-05-07
用虚函数进行多态设计
  • 打赏
  • 举报
回复
jazy 2004-05-07
你这个问题应该用多态来解决啊,再合适不过了
  • 打赏
  • 举报
回复
cmx98 2004-05-07
同意楼上的
  • 打赏
  • 举报
回复
_foo 2004-05-07
如果是你想在一个循环中来调用Draw的话,可以这样用虚函数来解决.

#include <process.h>
#include <iostream>
using namespace std;

class CBase
{
public:
virtual void Draw()=0;
};

class CA:public CBase
{
public:
void Draw(){
cout<<"CA::Draw"<<endl;
}
};

class CB:public CBase
{
public:
void Draw(){
cout<<"CB::Draw"<<endl;
}
};
int main(int argc, char* argv[])
{
CBase* pFoo = new CA();
pFoo->Draw();
delete pFoo;

system("pause");
return 0;
}

  • 打赏
  • 举报
回复
_foo 2004-05-07
如果你的类名是CFoo那么就是((CFoo*)pobj)->Draw();//pobj是从CObArray返回的CObject基类指针...

有何疑问?
  • 打赏
  • 举报
回复
34539890 2004-05-07
怎么没人帮我啊?
  • 打赏
  • 举报
回复
相关推荐
发帖
界面
加入

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2004-05-05 03:24
社区公告
暂无公告