運算符重載的小項目展示

array.h

#ifndef _ARRAY_H_
#define _ARRAY_H_


class myarray
{
public:
myarray(int length);
myarray(const myarray&obj);
int length();
void setdata(int index, int value);
int getdata(int index);
~myarray();
protected:
private:
int mlength;
int *mspace;
public:
int& operator[](int i);
myarray& operator=(myarray &a1);//支持連等,返回一個引用當左值。


};
#endif


array.cpp

#include "iostream"
using namespace std;
#include"array.h"


myarray::myarray(int length)
{
if (length < 0)
{
length = 0;
}
mlength = length;
mspace = new int[length];
}
int & myarray::operator[](int i)
{
return mspace[i];
}
myarray& myarray::operator=(myarray &a1)
{
int i = 0;
if (this->mspace != NULL)
{
delete[]mspace;
this->mlength = 0;
}
this->mlength = a1.mlength;
this->mspace = new int[a1.mlength];
for (i = 0; i < this->mlength; i++)
{
mspace[i] = a1[i];
}
return *this;


}


myarray::myarray(const myarray& obj)
{
if (mspace != NULL)
{
delete[]mspace;
this->mlength = 0;
}
mlength = obj.mlength;
mspace = new int[mlength];
for (int i = 0; i < mlength; i++)
{
mspace[i] = obj.mspace[i];
}


}


int myarray::length()
{
return mlength;
}
void myarray::setdata(int index, int value)
{
mspace[index] = value;
}


int myarray::getdata(int index)
{
return mspace[index];
}
myarray::~myarray()
{
mlength = -1;
delete[]mspace;
}


mytest.cpp

#include "iostream"
using namespace std;
#include"array.h"


int main()
{
myarray a1(10);

for (int i = 0; i < a1.length(); i++)
{
//a1.setdata(i,i);
//a1.operator[] = i;
a1[i] = i;
}
for (int i = 0; i < a1.length(); i++)
{
printf("array %d:%d\n",i,a1[i]);
//a1.setdata(i, i);
}

myarray a2 = a1;


for (int i = 0; i < a2.length(); i++)
{
printf("array %d:%d\n", i, a2.getdata(i));
//a1.setdata(i, i);
}

myarray a3(20);
a2=a3 = a1;
for (int i = 0; i < a3.length(); i++)
{
printf("array %d:%d\n", i, a3[i]);
//a1.setdata(i, i);
}


system("pause");
return 0;
}

發佈了61 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章