快速业务通道

实例解析C++/CLI中的接口与泛型

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
T,无论类型T是否处在运行时,它都是从System::Object继承来的,因此,它与参数类型相兼容。更进一步来说,因为System::Object有一个名为ToString的虚函数,对此虚函数的调用将产生一个String^,假定类型T已覆盖了这个函数,那么就可返回正确的字符串了。

函数Equals非常简单明了,但有一件事需要指出,请看标号11,从直觉上来说,我们一般会在此写成!=操作符,但是,这却通不过编译。请记住,类Vector是在对类型T一无所知的情况下编译的,除了它是继承自System::Object,同样地,唯一它允许对T调用的成员函数是那些由System::Object提供的函数,而这些类型未定义!=操作符,幸运的是,它提供了Equals函数,因此可使用它来达到同样的目的;接着,类型T覆盖了这个函数以执行对两个T的相等性判别,例11是主程序。

例11:

int main()
{
  /*1*/ Vector<int>^ iv1 = gcnew Vector<int>(4);
  /*2*/ Console::WriteLine("iv1: {0}", iv1);
  /*3*/ Vector<int>^ iv2 = gcnew Vector<int>(7, 2);
  Console::WriteLine("iv2: {0}", iv2);
  iv2[1] = 55;
  iv2[3] -= 17;
  iv2[5] *= 3;
  Console::WriteLine("iv2: {0}", iv2);
  /*4*/ Vector<String^>^ sv1 = gcnew Vector<String^>(3);
  Console::WriteLine("sv1: {0}", sv1);
  /*5*/ Vector<String^>^ sv2 = gcnew Vector<String^>(5, "X");
  Console::WriteLine("sv2: {0}", sv2);
  sv2[1] = "AB";
  sv2[3] = String::Concat(sv2[4], "ZZ");
  Console::WriteLine("sv2: {0}", sv2);
  /*6*/ Vector<DateTime>^ dv1 = gcnew Vector<DateTime>(2);
  Console::WriteLine("dv1: {0}", dv1);
  /*7*/ Vector<DateTime>^ dv2 = gcnew Vector<DateTime>(3, DateTime::Now);
  Console::WriteLine("dv2: {0}", dv2);
  for (int i = 0; i < dv2->Length; ++i)
  {
   Thread::Sleep(1100);
   dv2[i] = DateTime::Now;
  }
  Console::WriteLine("dv2: {0}", dv2);
  /*8*/ Vector<Vector<int>^>^ viv = gcnew Vector<Vector<int>^>(3);
  Console::WriteLine("viv: {0}", viv);
  viv[0] = gcnew Vector<int>(2, 1);
  viv[1] = gcnew Vector<int>(4, 2);
  viv[2] = gcnew Vector<int>(3, 5);
  Console::WriteLine("viv: {0}", viv);
  /*9*/ Vector<int>^ iv3 = gcnew Vector<int>(4,3);
  Vector<int>^ iv4 = gcnew Vector<int>(4,3);
  Vector<int>^ iv5 = gcnew Vector<int>(4,2);
  Vector<int>^ iv6 = gcnew Vector<int>(5,6);
  Console::WriteLine("iv3->Equals(iv4) is {0}", iv3->Equals(iv4));
  Console::WriteLine("iv3->Equals(iv5) is {0}", iv3->Equals(iv5));
  Console::WriteLine("iv3->Equals(iv6) is {0}", iv3->Equals(iv6));
}

为创建Vector的一个特定类型,可在尖括号中作为类型参数指定一个类型,如标号1、3所示。记住,int是值类System::Int32的同义词。(如果泛型有多个类型参数,需要以逗号把它们分隔开。)

在标号4、5中,定义了一个String^类型的Vector--一个引用类型;在标号6、7中,定义了一个DateTime类型的Vector--一个值类型;在标号8中,定义了一个Vector,而其的元素则为int类型的Vector;最后,用不同的len

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号