当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:56:00  来源:本站整理

实例解析C++/CLI中的接口与泛型[VC/C++编程]

赞助商链接



  本文“实例解析C++/CLI中的接口与泛型[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

接口

某些时刻,让不相关的类分享一组公有成员,以便产生相同的行为,是非常有效的.一个最基本的办法大概是通过一个大众的基类来定义它们,但这种办法太受范围,因为它要求这些类通过担当而彼此关联,别的,它们大概还有着各自的基类,且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.当然了,任何从抽象类担当而来的类也是抽象类,除非定义了之前的这些抽象函数.

接口不供应多重担当,与此相比,一个CLI类也只能有一个基类,但是,接口却供应某种与多重类担当类似的功效,但概念与之完好差别,比方,一个类不能从接口中担当函数定义;接口担当体系是独立于类担当体系的--实现同一接口的类大概会、但大概不会通过类担当体系彼此关联.

例4演示了一个类:Queue,其与List无关联(但除了这个外,二者都是从Object担当而来的),二者都实现了同一接口.

例4:

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

目前,可用它来编写处理参数为List或Queue的函数了,如例5.

例5:

ref class Item { /* ... */ };
void ProcessCollection(ICollection^ c);
int main()
{
  List^ myList = gcnew List;
  Queue^ myQueue = gcnew Queue;
  ProcessCollection(myList);
  ProcessCollection(myQueue);
}
void ProcessCollection(ICollection^ c)
{
  Item^ x = gcnew Item();
  /*1*/ c->Put(x);
  /*2*/ x = static_cast<Item^>(c->Get());
}


  以上是“实例解析C++/CLI中的接口与泛型[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • Windows 7远程帮忙利用实例解析
  • Java程序最简单犯的21种错误实例解析
  • 基于J2EE的电子商务网站实例解析
  • 实例解析C++/CLI的串行化
  • 实例解析C++/CLI的"克隆"
  • 实例解析C++/CLI线程之多任务
  • 实例解析C++/CLI线程之线程状况长期性
  • <b>实例解析C++/CLI之开卷有益</b>
  • <b>实例解析C++/CLI之值范例</b>
  • <b>实例解析C++/CLI之代理与事件</b>
  • 实例解析C++/CLI之静态构造函数
  • 实例解析C++/CLI中的担当与列举
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .