在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;
}