我最近在看“COM原理与应用”,对接口的概念一直弄不明白,书上说接口相当于类的pVtable,那么一个类只有一个pVtable,又怎么可能“一个对象可以有多个接口”呢?
接口在设计中是怎么实现的?

解决方案 »

  1.   

    同时继承多个类就会有多个pVtable
      

  2.   

    接口就是一个class,但这个class只有vtable.
    多重继承是实现多个接口的一个方法。
      

  3.   

    接口是一种内存布局的协议,vtable只是实现这种协议的方法之一。比如你声明实现了IUnknown接口,只是表明你可以暴露一块内存,它的布局是三个函数指针,按顺序分别指向QueryInterface,Addref和Release。
      

  4.   

    COM标准定义了组件接口在内存中的结构,以保证它拥有二进制级的共享能力,不同的语言用不同的方法实现这块内存结构,在C++中抽象基类(只包含纯虚函数成员的类)编译后的内存结构与COM标准中定义的接口结构相类似,因此在C++中可以用抽象基类来实现COM接口。请注意<COM原理与应用>一书以C++语言为工具实现COM,并不是说只有用类才能实现COM。COM接口是COM中比较重要的部分,我的经验是学习COM编程要以COM标准为指导,这样能比较清楚各种语言是怎样实现COM的。我只明白这么多了,希望各位能和我多交流:
    QQ:17810021
    验证请用:COM
      

  5.   

    我的感觉,从C++来说 ,接口就是一个抽象类。其实如果你对C++很有理解的话,看看潘老的书,你就应该明白接口的含义。也不要太去追寻COM的原理,我觉得只有你在C++的基础上理解,然后能用ATL或MFC熟练的做COM组件就可以了。
      

  6.   

    接口与语言无关,可以认为是一组函数调用集合的代表。支持某个接口就代表必须提供这个函数调用集合的某种实现。对象作为一组接口集合的代表,C++的虚表(vtbl)经常用来说明接口,只是它的内存布局恰好符合接口的规范罢了。纯C语言也可以实现COM编程。所以你的问题是对C++内部实现机制缺乏了解。建议看一下《深入探索C++对象模型》或《COM技术内幕》,里面讲的可能更清楚一些。