美文网首页
C++ 接口和多态

C++ 接口和多态

作者: 家中古词 | 来源:发表于2018-12-01 21:17 被阅读0次
    // Define interface
    class Widget {
     public:
      Widget();
      virtual ~WIdget();
      virtual std::size_t size() const;
      virtual void Normalize();
      void Swap(Widget &other);
      // And something else.
    };
    
    // Use interface
    void DoProcess(Widget &w) {
      if (w.size() > 10) {
        Widget tmp(w);
        tmp.Normailze();
        tmp.Swap(w);
      }
    }
    

    面向对象编程使用如上的显式接口实现运行时多态

    接口,也就是 Widget 类的方法,被显式定义出来。而多态,即 wsize() 等方法的调用,在运行时根据 w 的动态类型确定一个函数指针,不同动态类型可能对应不同的函数指针,由此实现多态。

    template <typename T>
    void DoProcess(T &w) {
      if (w.size() > 10) {
        T tmp(w);
        tmp.Normailze();
        tmp.Swap(w);
      }
    }
    

    而使用模板的方法,T 表示任何可以执行 DoProcess 之中 w 进行的操作的对象。接口是通过使用定义的,而不是直接写出的,是为隐式接口。不同类型的 T 使用此函数,执行的操作,也就是运行函数的指针 ,在编译时即可得到确认,是为编译期多态

    相关文章

      网友评论

          本文标题:C++ 接口和多态

          本文链接:https://www.haomeiwen.com/subject/voprcqtx.html