第13章 運算符類型與運算符重載

1.運算符是爲了讓類更直觀,便於理解維護

2.class cdate

{

private:

int mday;

int mmont;

int myear;

void adddays(int ndt)

{

mday+=ndt;

if(mday>30)

{

addmonths(mday/30);

mday%30;

}

}

void addmonths(int nmt)

{

mmnoth+=nmt;

if(mmonth>12)

{

addyears(mmonth/12)

mmonth%12;

}

}

void addyears(int myt)

{

nyrear+=myt;

}

public:

cdate(int nday, int nmonth, int nyear):mday(nday), mmonth(nmonth), myear(nyrear){};

cdate & operator++()//這一個是++date,前綴的實現,因爲是要返回遞增後的值

{

adddays(1);

return *this;

}

cdate operator ++(int)//這一個是date,後綴的實現,因爲要發揮遞增之前的值

{

cdat mreturndate(mday, mmonth, myear);

adddays(1);

return mreturndate;

}

}

3.auto_ptr <int> pint (new int);智能指針的定義

4.簡單智能指針的實現

 template<typenamt t>

class smart_pointer

{

private:

t * mprawpointer;

public:

smart_pointer(t*pdata):mprawpointer(pdata){}

~smart_pointer(){delete mprawpointer;}

smart_pointer(const smart_pointer & anothersp);

smart_pointer & operator=(const smart_pointer& anothersp);

t&operator*()const

{return*(mprawpointer);

}

t*operator->()const

{return mprawpointer;}

};

5.int a=data(1,1,1111);

實現這個方法,可以用一個單目運算符來實現。

operator type();

class data

{

operator int()

{

return value;

};

6.class cdate

{private: int mday;

void addday(int nd)

{mday+=nd;}

public:

cdate(int nday)

:mday(nday){};

cdate operator +(int ndays)

{cdate newdate(mday);

newdate.adddays(ndays);

return newdate;

}

類的加法,用於

cdate mdate(25);

cdate dateplus(mdate+10);

 7. 類的比較運算符

如果兩個類的對象進行下面的比較:

class1==class2;

這樣的話,如果沒有定義比較運算符,那麼就是比較的class1和class2的二進制,只有完全相同纔可以相等。在有些情況下是可行的,但是如果類的成員有指針等動態的成員,那麼比較的時候會比較指針是否相同,這樣就失去了比較的意義。

class cdate

{

private:

int mday;

int mmonth;

int myear;

void adddays(int nday);

void addmonth(int nmonth);

void addyear(int nyear);

public:

cdate(int nday, int nmonth, int nyear):mday(nday), mmonth(nmonth), myear(nyear){};

void displaydate()

{cout << mday<< mmonth << myear;}

operator int();

bool operator == (const cdate & mdateobj);

bool operator == (int datenum);

};

cdate:: operator int ()

{return 100;}

bool cdate::operator == (int datenum)

{return datenum==(int)*this;}

bool cdate::operator == (const cdate& mdateobj)

{

return ( (mdateobj.myear==myear)

&&(mdateobj.mmonth==mmonth)

&&(mdateobj.mday==mday));

}

 8.重載< > <= >=

class cdate

{

private:

int mday;

int mmonth;

int myear;

public:

operator int()

{

return ((myear*1000)+(mmonth*100)+mday);

}

bool operator < (const cdate & mdateobj)const;

};

bool cdate::operator < (const cdate & mdateobj) const

{

return (this->operator int() < mdateobj.operator int());

}

9.下標運算符

class marray

{

private:

int * parray;

int num;

public:

marray(int num);

~marray();

int & operator[](int nindex);

};

int & marray:opertor[](int nindex)

{

return parray[nindex];

}

marray::marray(int num)

{

parray = new int [num];

this.num=num;

}

10. operator()

class display

{

public:

void operator()(std::string strin) const

{

std::cout << strin << std::endl;

}

};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章