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