高手快帮忙啊

34539890 2004-05-05 03:24:36
我将我自己设计的两个不同类的实例都存进了CObArray,我现在要将他们读出来进行各自的Draw()函数,但CObArray返回的只是一个CObject基类指针,要进行强制转换,但怎么转换成各自的类型呢?
...全文
63 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 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()函数,怎么实现呢?
  • 打赏
  • 举报
回复
像一楼那样,用虚函数来实现多态,这样可以避免强制类型转换

(基类->派生类 的转换会出现切割问题,要避免)
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
  • 打赏
  • 举报
回复
怎么没人帮我啊?

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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