游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3204|回复: 6

问大家一个不大不小的问题,如何实例化抽象类?

[复制链接]

19

主题

52

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2009-6-10 17:15:00 | 显示全部楼层 |阅读模式
我今天看到一种代码(公司里的代码)
大概是这样
namespace t
{
class tt // 这是一个抽象类
{
public:
static tt* Create();       // 一个静态方法(可以用于创建抽象类tt的静态方法)
virtual void tt_t() = 0;   // 纯虚函数
};
};
using namespace t;

int main()
{
tt* obj = tt::Create(); // 这样就创建了抽象类

return 0;
}


我的问题是,这个骗过编译器实例化抽象类的方法到底是一个什么机制?
Create的具体实现公司没有给出,
在用Create创建抽象类实例后,抽象类对象obj可以直接调用抽象方法tt_t
这是为什么?

9

主题

249

帖子

260

积分

中级会员

Rank: 3Rank: 3

积分
260
发表于 2009-6-10 22:28:00 | 显示全部楼层

Re:问大家一个不大不小的问题,如何实例化抽象类?

可能tt只是个接口类而已,真正的实现类继承tt并实现了tt_t方法,只是以bin形式存在(没源码),tt::Create方法就是用来实例化那实现类的唯一接口

9

主题

249

帖子

260

积分

中级会员

Rank: 3Rank: 3

积分
260
发表于 2009-6-10 22:28:00 | 显示全部楼层

Re:问大家一个不大不小的问题,如何实例化抽象类?

这是一种正常的封装方式

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-6-22 17:11:00 | 显示全部楼层

Re: 问大家一个不大不小的问题,如何实例化抽象类?

namespace U
{
    typedef enum
    {
        E_IO = 0,
        E_NET,
        E_UNKNOWN,

    }EType;

    class IPrint
    {
    public:
        static IPrint* Create(EType eType);
        virtual void Do() = 0;
    };

    class CIOPrint : public IPrint
    {
    public:
        virtual void Do(){}
    };

    class CNETPrint : public IPrint
    {
    public:
        virtual void Do(){}
    };

    IPrint* IPrint::Create(EType eType)
    {
        switch (eType)
        {
        case E_IO:
            return new CIOPrint;
        case E_NET:
            return new CNETPrint;
        default:
            break;
        }
        return NULL;
    };
};

using namespace U;

int main()
{
    IPrint* obj = IPrint::Create(E_IO);

    if (NULL != obj)    obj->Do();

    return 0;
}

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-7-7 20:08:00 | 显示全部楼层

Re: 问大家一个不大不小的问题,如何实例化抽象类?

晕,建议楼主去看一下抽象工厂,那方法只能算个工厂方法,用来实例化子类的实现而已
很常用的封装技巧

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-7-30 12:52:00 | 显示全部楼层

Re:问大家一个不大不小的问题,如何实例化抽象类?

Abstract Factory Pattern

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2009-8-17 15:38:00 | 显示全部楼层

Re:问大家一个不大不小的问题,如何实例化抽象类?

同意楼上的。Abstract Class只是提供了一个Interface,肯定是其下的子类实现了virtual void tt_t()的方法,这么做的根本原因就是Abstract Factory Pattern的要求。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-21 08:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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