Listing 5

generic <typename T>
public ref class Vector
{
     int length;
/*1*/     array<T>^ vector;

public:
     virtual Object^ Clone()
     {
          Vector<T>^ v = static_cast<Vector<T>^>(MemberwiseClone());
          v->vector = static_cast<array<T>^>(vector->Clone());
          return v;
     }

};

int main()
{
/*1*/     Vector<int>^ v1 = gcnew Vector<int>(5, 7);
/*2*/     Console::WriteLine("v1: {0}", v1);
/*3*/     Vector<int>^ v2 = static_cast<Vector<int>^>(v1->Clone());
/*4*/     Console::WriteLine("v2: {0}", v2);
/*5*/     v1[0] = 3;
/*6*/     v1[3] = 9;
/*7*/     v2[4] = 1;
/*8*/     Console::WriteLine("v1: {0}", v1);
/*9*/     Console::WriteLine("v2: {0}", v2);
}