(GeekBand)C++面向对象高级编程(上)第一周测试

来源:互联网 发布:js设计模式与开发实践 编辑:程序博客网 时间:2024/06/05 14:24

第六节 测试

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

第一次自己造轮子,虽说是基础中的基础吧,但还是满满的成就感,哈哈。

0 0
原创粉丝点击