C++---拷贝函数

在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。

构造函数没有返回值,因为没有变量来接收返回值,即使有也毫无用处,这意味着:
不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许;
函数体中不能有 return 语句。

#ifndef __INTARRAY_H_
#define __INTARRAY_H_
class IntArray
{
private:
    int length;
    int* m_pointer;
public:
    IntArray(int lenght);
    IntArray(const IntArray& obj);
    int lenght();
    bool set(int index,int value);
    bool get(int index,int& value);
    void free();
};

IntArray::IntArray(int len)
{
   m_pointer = new int[len];

   for(int i = 0;i<len;i++)
   {
       m_pointer[i] = 0;
   }
   length = len;
}
IntArray::IntArray(const IntArray& obj)//拷贝构造函数,深拷贝
{
    length = obj.length;
    m_pointer = new int[length];
    for(int i = 0;i<obj.length;i++)
    {
        m_pointer[i] = obj.m_pointer[i];
    }
}
int IntArray::lenght()
{
    return length;
}
bool IntArray::set(int index,int value)
{
    int ret = (0 <= index) && ( index < length);
    if(ret)
    {
        m_pointer[index] = value;
    }
    return ret;
}
bool IntArray::get(int index,int &value)
{
    int ret = ( 0 <= index )&&( index<length);
    if(ret)
    {
        value = m_pointer[index];
    }

    return ret;
}
void IntArray::free()
{
    delete[] m_pointer;
}


#endif

#include <iostream>
using namespace std;
#include "intarray.h"


int main()
{
    IntArray a(5);
 
    int value;
    for(int i = 0;i<a.lenght();i++)
    {
        a.set(i,i+1);
    }
    for(int i = 0;i<a.lenght();i++)
    {
        a.get(i,value);
        cout<<value<<endl;
    }

    IntArray b = a;
    for(int i = 0;i<b.lenght();i++)
    {
        b.get(i,value);
        cout<<value<<endl;
    }
    a.free();
    b.free();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值