下面程序中定义了一个整型动态数组,编写了 3 个构造函数。
IntArray::IntArray( int sz ) { size = sz; // 设置数据成员 ia = new int[ size ]; for ( int ix=0; ix < size; ++ix ) ia[ix] = 0; // 初始化数组元素 } IntArray:: IntArray( int *array, int sz ) { size = sz; // 设置数据成员 ia = new int[ size ]; for ( int ix=0; ix < size; ++ix ) ia[ix ] = array[ ix ]; // 拷贝数据成员 } IntArray:: IntArray( const IntArray &rhs ){ size = rhs.size; ia = new int[ size ]; for (int ix = 0; ix < size; ix++ ) ia[ ix ] = rhs.ia[ ix ]; }
(2)程序中,类 IntArray 的三个构造函数都是以相似的方式来实现的。一般 来说,当两个或多个函数重复相同的代码时,可将这部分代码抽取出来,形成独 立的函数,以便共享。以后如果需要改变这些实现,则只需改变一次,而且这种 实现的共享本质更容易为大家所理解。怎样把构造函数中的代码抽取出来形成独 立的共享函数呢?请给出一种可能的实现。按你给出的实现方法修改程序并重新 编译运行。
void init(int sz, int *array = NULL);
void IntArray::init(int sz, int *array)
{
size = sz; // 设置数据成员
ia = new int[ size ];
if(array == NULL)
{
for(int ix = 0; ix < size; ++ix)
ia[ix] = 0; // 初始化数组元素
}else
{
for(int ix = 0; ix < size; ++ix)
ia[ix] = array[ix]; // 初始化数组元素
}
}
IntArray::IntArray(int sz)
{
init(sz);
}
IntArray:: IntArray(int *array, int sz)
{
init(sz,array);
}
IntArray:: IntArray(const IntArray &rhs)
{
init(rhs.size,rhs.ia);
}