第六节 测试
1.指针回调很重要。如果不想使用指针自增的方法从而减少发生内存问题的几率,可以使用p[i]的形式进行操作
2.友元很bug
废话不多说直接贴代码。
//main.cpp
#include<iostream>
#include"Data.h"
using namespace std;
int main()
{
Data test;
Data *p=new Data[10];
p=CreatePoints(p);
for(int i=0;i<10;i++)
{
test.print(p[i]);
}
cout<<endl;
Sort(p);
for(i=0;i<10;i++)
{
test.print(p[i]); //p[i]形式
}
delete []p;
return 0;
}
//Data.h
#include<time.h>
using namespace std;
class Data
{
private:
int year;
int month;
int day;
friend bool _doap1(const Data*,const Data&);//<
friend bool _doap2(const Data*,const Data&);//>
friend bool _doap3(const Data*,const Data&);//==
friend Data& _doap4(Data*,const Data&);//=
friend void sort(Data*);
public:
Data(int yea=1,int mont=1,int da=1):year(yea),month(mont),day(da)
{}
void syear(int x){year=x%2016+1001;}
void smonth(int x){month=x%12+1;}
void sday(int x){day=x%27+1;}
bool operator < (const Data&);
bool operator > (const Data&);
bool operator == (const Data&);
Data& operator = (const Data&);
void print(const Data&);
};
inline bool
_doap1(const Data* ths,const Data& x)
{
if(ths->year<x.year) return 1;
else if(ths->year>x.year) return 0;
else if(ths->month<x.month) return 1;
else if(ths->month>x.month) return 0;
else if(ths->day<x.day) return 1;
else return 0;
}
inline bool
_doap2(const Data* ths,const Data& x)
{
if(ths->year>x.year) return 1;
else if(ths->year<x.year) return 0;
else if(ths->month>x.month) return 1;
else if(ths->month<x.month) return 0;
else if(ths->day>x.day) return 1;
else return 0;
}
inline bool
_doap3(const Data* ths,const Data& x)
{
if(ths->year==x.year&&ths->month==x.month&&ths->day==x.day)
return 1;
return 0;
}
inline Data&
_doap4(Data* ths,const Data& x)
{
ths->syear(x.year);
ths->smonth(x.month);
ths->sday(x.day);
return *ths;
}
inline bool
Data::operator < (const Data& x)
{
return _doap1(this,x);
}
inline bool
Data::operator > (const Data& x)
{
return _doap2(this,x);
}
inline bool
Data::operator == (const Data& x)
{
return _doap3(this,x);
}
inline Data&
Data::operator = (const Data& x)
{
return _doap4(this,x);
}
void Data::print(const Data& x)
{
cout<<x.year<<"-"<<x.month<<"-"<<x.day<<endl;
}
Data* CreatePoints(Data* data)
{
srand(time(NULL));
Data* dat=data;
for(int i=0;i<10;i++)
{
dat->syear(rand());
dat->smonth(rand());
dat->sday(rand());
dat++;
}
return data; //指针回调
}
void Sort(Data* data)
{
int i,j;
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
if(data[j]>data[j+1])
{
Data temp=data[j];data[j]=data[j+1];data[j+1]=temp;
}
}
}
}
第一次自己造轮子,虽说是基础中的基础吧,但还是满满的成就感,哈哈。