9.9.3 接口类
接口类的定义看起来非常类似于引用类的定义,但它是个完全不同的概念。接口类指定一组将由其他类实现的函数,以提供标准化的、可提供某种具体功能的方法。数值类和引用类都可以实现接口。接口不定义任何自有的函数成员,其指定的函数是由实现该接口的各个类定义的。
我们在通用函数的上下文中已经遇到过System::Comparable接口,当时将IComparable接口指定为一项约束条件。System::Comparable接口指定了用于比较对象的CompareTo()函数,因此所有实现该接口的类都拥有相同的比较对象的机制。我们为某个类指定应实现的接口的方式与指定基类的方式相同。例如,我们可以像下面这样使上一个示例中的Box类实现System::IComparable接口:
- ref class Box : Container, IComparable // Derived class
- {
- public:
- // The function specified by IComparable interface
- virtual int CompareTo(Object^ obj)
- {
- if(Volu me() < safe_cast<Box^>(obj)->Volume())
- return -1;
- else if(Volume() > safe_cast<Box^>(obj)->Volume())
- return 1;
- else
- return 0;
- }
-
- // Rest of the class as before...
- };
接口名跟在基类名Container后面。如果没有基类,则这里单独出现接口名。引用类只能有一个基类,但可以实现任意多的接口。这样的类必须定义宣称要实现的各个接口指定的每一个函数。IComparable接口仅仅指定了一个函数,但接口中允许有任意多个函数。Box类现在定义了CompareTo()函数,使用的签名与IComparable接口为该函数指定的相同。因为CompareTo()函数的形参属于Object^类型,所以我们必须将其强制转换为Box^类型,之后才能访问该句柄引用的Box对象的成员。