zoukankan      html  css  js  c++  java
  • 使用模板来解决接口继承问题

     

    一.定义2个有继承关系的接口

    struct IA
    {
        virtual void Test1()=0;
    };
    
    struct IB:public IA
    {
        virtual void Test2()=0;
    };
    

    二.定义2个类来实现

    class A:public IA
    {
        virtual void Test1() {}
    };
    
    class B:public IB
    {
    public:
        virtual void Test2() 
        {
    
        }
    };
    

    类B将无法使用,必须重新实现IA的Test1方法,如下代码

    class B:public IB
    {
    public:
        virtual void Test2() {}
        virtual void Test1() {}
    };
    

    这样的做法使得接口继承非常麻烦

    三.使用模板来实现接口单继承

    c#和java都是可以单类和多接口继承,c++则可以多个类继承,这使得多继承设计上带来麻烦,尽量使用单继承来避免问题.

    先看一个非模板的实现

    class CA: public IB
    {
    public:
        virtual void Test1() {}
    };
    
    class CB:public CA
    {
    public:
        virtual void Test2() {}
    };
    

    以上的定义,CB可以声明,CA则会编译错误,根据上面的思想,可以将其改造为模板版本

    template<class IActual>
    class CA: public IActual
    {
    public:
        virtual void Test1() {}
    };
    
    template<class IActual>
    class CB: 
        public CA<IActual>
    {
    public:
        virtual void Test2() {}
    };
    
    template<class IActual>
    class CC: public CB<IC>
    {
    public:
        virtual void Test3() {}
    };
    

    测试代码:

    int main()
    {
        CB<IB> b;
        CC<IC> c;
        IB *p=dynamic_cast<IB*>(&b);
        p->Test2();
        return 0;
    };
    
  • 相关阅读:
    Java && Eclipse使用中的问题
    Java使用的扩展
    Java的基本使用之多线程
    Java的基本使用之反射
    Java的基本使用之IO
    Java的基本使用之异常处理
    CSS中的line-height和vertical-height
    Java的基本使用之多线程
    跟进记录
    将文件从已Root Android手机中copy出来的几个cmd窗口命令
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/3407339.html
Copyright © 2011-2022 走看看