• 您的位置我爱Aspx >> VC.Net >> 实例解析C++/CLI中的接口与泛型
  • 实例解析C++/CLI中的接口与泛型

  • 作者:谢启东编译  来源:天极开发  日期:2007-3-16 21:30:17  关键字:
  • 接口

    某些时候,让不相关的类分享一组公有成员,以便产生相同的行为,是非常有用的。一个最基本的方法可能是通过一个公共的基类来定义它们,但这种方法太受局限,因为它要求这些类通过继承而互相关联,另外,它们也许还有着各自的基类,且CLI类型只支持单一类继承。

    C++/CLI提供了一种方法,可利用多个类实现一组通用的功能,这就是我们通称的"接口",而一个接口则是一组成员函数的声明。要注意,这些函数只是声明,没有定义,也就是说,一个接口定义了一个由抽象函数组成的类型--这些函数实际上是纯虚函数,且在适当的时候,这些函数由客户类来实现。一个接口可允许不相关的类用同一名称和类型,实现同一功能,而无须要求这些类分享公共基类。在例1中演示了怎样定义一个接口。

    例1:

    using namespace System;public interface class ICollection{ void Put(Object^ o); //隐式public abstract Object^ Get(); //隐式public abstract};

    一个接口的定义看上去非常像一个类,除了用interface取代了ref或value,所有的函数都没有函数体,且均隐式为public和abstract。按照通常的约定,一个接口名带有起始字母I,后再接一个大写字母。(接口类与接口结构是等价的。)与类相似,一个接口也能有public或private访问可见性。

    一个接口能有一个或多个"基接口",在这种情况下,它将继承这些接口中的所有抽象函数,例如,在例2中,接口I2显式继承自I1,而I3显式继承自I1与I2,并通过I2隐式继承自I1。

    例2:

    interface class I1 { /* ... */ };interface class I2 : I1 { /* ... */ };interface class I3 : I1, I2 { /* ... */ };

    一个类可像从基类继承时那样,来实现一个接口,见例3。

    例3:

    public ref class List : ICollection{ public: void Put(Object^ o) { // ... } Object^ Get() { // ... } // ...};

    一个类能实现一个以上的接口,在这种情况下,必须使用逗号来分隔接口列表,顺序倒不是很重要。当然,一个类在实现一个或多个接口时,也能显式地带有一个基类,在这种情况下,基类通常(但不是必须)写在最前面。

    如果一个类实现了一个接口,但没有定义接口中所有的函数,这个类就必须声明为abstract。当然了,任何从抽象类继承而来的类也是抽象类,除非定义了之前的这些抽象函数。

    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:实例解析C++/CLI中的继承与枚举
    下一篇:缓冲区溢出还是问题吗?C++/CLI安全编码
  • 相关文章