游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: 雨落寒星

一个关于派生类函数的调用问题,请朋友们看看

[复制链接]

6

主题

396

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
发表于 2006-8-17 12:11:00 | 显示全部楼层

Re:一个关于派生类函数的调用问题,请朋友们看看

有时候问题说得太抽象了不容易理解,有时候说得太具体了也一样。
我觉得楼主要实现的东西有点类似于DirectX的CreateDevice

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-8-17 13:25:00 | 显示全部楼层

Re:一个关于派生类函数的调用问题,请朋友们看看

抽象工厂模式、克隆模式、句柄模式,任一个应该都可以解决问题。

举个例子,用抽象工厂,可以让pObject提供一个方法返回一个抽象工厂的指针,这个抽象工厂用于创建pObject动态类型的对象。因为pObject知道自身类型,所以可以准确地给出具体工厂的类型。具体工厂通过覆盖一个从抽象工厂继承下来的虚函数 virtual Base* CreateObject()来返回正确类型的对象。

其他几个模式的用法类似。

0

主题

23

帖子

23

积分

注册会员

Rank: 2

积分
23
发表于 2006-8-18 00:46:00 | 显示全部楼层

Re:一个关于派生类函数的调用问题,请朋友们看看

太简单了,3行代码可以满足你所有需求
static first tmp;
tmp = *(first*)pObject;
m_lpObject = &tmp;

不过。。。这么简单的代码应该不是你所需要的答案吧,哇哈哈


PS:抽象工厂正是你所需要的答案啦

50

主题

244

帖子

319

积分

中级会员

Rank: 3Rank: 3

积分
319
QQ
 楼主| 发表于 2006-8-18 18:40:00 | 显示全部楼层

Re: Re:一个关于派生类函数的调用问题,请朋友们看看

justlikethewind: Re:一个关于派生类函数的调用问题,请朋友们看看

抽象工厂模式、克隆模式、句柄模式,任一个应该都可以解决问题。

举个例子,用抽象工厂,可以让pObject提...

朋友能说下克隆模式和句柄模式吗?抽象工厂模式我今天尝试写了下,感觉离我的要求有点距离。因为每次返回一个实例都要定义一个变量,这样一来加上保存实例指针的变量就2个变量了。
能否做到这样的效果?
test *test = NULL;
factory.create(test);//这样就直接创建一个实例了,当然这里的指针是引用传递的。
不知道朋友所说的句柄模式和这个是否有类似之处?

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-8-18 22:46:00 | 显示全部楼层

Re:一个关于派生类函数的调用问题,请朋友们看看

说实话,我没看懂楼主的回复。-______-!

关于句柄模式和克隆模式,请参考Moo夫妇写的C++沉思录。

我说的抽象工厂模式是这样用的:

class Manager
{
protected:
first *m_lpObject;

public:
void Add(base *pObject)
{
//注意,具体工厂使用singleton(独生子)模式,保证每个具体工厂类型全局只有唯一实例
  AbstractFactory* abstract_factory = pObject->getFactory();
  Base* base_object = abstract_factory->createBaseObject();
//这里就可以使用base_object了。
}
void Show(){m_lpObject->doSomeThing();}
};

至于你后来说的:
=========
test *test = NULL;
factory.create(test);//这样就直接创建一个实例了,当然这里的指针是引用传递的。
=========
只要factory是从pObject创建出来的具有正确真实类型的具体工厂,那自然就没有问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 03:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表