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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章