posts - 58,  comments - 75,  trackbacks - 0

    接口,通俗的来说就是定义了一组要实现的功能,这些功能被表现为一组函数,
这些函数在语义上给定接口实现类的责任。
    C++中常用的定义接口的方法是纯虚类。但是定义的函数却是要确定操作类型的
但是从接口在语义上的考虑,其实是不需要的。
    用模板技术来改变。
    定义一个接口类,在类中只定义接口函数,这些函数是Client要使用的,这个
类是一个模板类,如下
    template< typename T >
    class Interface
    {
    public:
        template< typename T1 >
        void Fun( const T &t );
   
        ......
    };
    这种方式解决了接口函数被类型限制。
    模板类的参数是一个继承类,这个继承类完成实际的操作。实体类的定义如下
    class C : public Interface< C >
    {
        ......
    };

    子类去一个个的实例话其实很不好,也不符合一般C++的编程方法。由于在模板
编程的情况下,更注重的是语义的符合,所以可以在子类中使用重载的方法去实现对
不同类型的实际处理(毕竟没有类的编写者知道自己这个类要处理的类型)。那么可
以载接口类中写些代码,来调用子类的函数,这种调用实际上在语义上定义了子类要
实现的责任。上面的接口的定义变成下面这个样子
    template< typename T >
    class Interface
    {
    public:
        T* This( void ) { return static_cast< T* >( this ); }

        template< typename T1 >
        void Fun( const T &t )
        {
            this->This()->Ope( t );
        }
   
        ......
    };
   
    这样,子类只用实现对不同类型的处理的Ope函数了,对外的公共接口还是一样的。
显现中要讲基类编程子类的友员,Ope定义在protected或private作用域中。  

posted on 2007-01-13 18:06 walkspeed 阅读(2284) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理



<2007年1月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(4)

随笔分类(64)

随笔档案(58)

文章分类(3)

文章档案(3)

相册

收藏夹(9)

C++零碎

好友

搜索

  •  

积分与排名

  • 积分 - 159887
  • 排名 - 163

最新评论

阅读排行榜

评论排行榜