sasasasasamu 2022-05-20 22:47 采纳率: 0%
浏览 71

抽取构造函数怎么做啊

下面程序中定义了一个整型动态数组,编写了 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 的三个构造函数都是以相似的方式来实现的。一般 来说,当两个或多个函数重复相同的代码时,可将这部分代码抽取出来,形成独 立的函数,以便共享。以后如果需要改变这些实现,则只需改变一次,而且这种 实现的共享本质更容易为大家所理解。怎样把构造函数中的代码抽取出来形成独 立的共享函数呢?请给出一种可能的实现。按你给出的实现方法修改程序并重新 编译运行。

  • 写回答

1条回答 默认 最新

  • 浪客 2022-05-21 12:50
    关注
    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);
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月20日

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决