The function finishes by copying over the data from the array passed into the constructor to the new memory area. That is all there is to it. How are we going to do that for the two dimensional array. You just have to take the one dimensional case and add another dimension. Notice the similarities between the copy constructor and the set length function.
New memory is allocated and old information is copied to the new memory.
Just as these are the similarities, the addition of a second dimension is also just as similar. You don't, however, have to make two constructors. We only need one constructor because we are not checking for a change in either length.