天天看點

重載運算符

知識點

重載指派運算符=

一、重載運算符格式

  傳回類型    operator 運算符 (參數);

  如:

   bool  operator=(char*s);

  int    operator>(char*s);

  bool  operator new(int size);

二、重載指派運算符=

//頭檔案 Message.h  

intoperator=(char *s);

//源檔案 Message.cpp

intCMessage::operator=(char *s)
{
delete[] msg;
printf("構造this=%x\n",this);
//配置設定空間
msg=newchar[256];
//實作複制功能
strcpy_s(msg,256,s);
return 1;
}      

//主檔案 MessageC++.cpp

s2="新的資訊";//相當于s2.operator="新的資訊“;

s2.ShowMsg();      

三、重載注意事項

 以下運算符不能重載

  作用域解析符             ::

  條件運算符               ?:

  直接成員通路運算符      .

  sizeof運算符             sizeof

  對指向類成員的指針解除引用的運算符.*

重載大于運算符>

重載指派運算符>

試着重載>來比較2個對象字串的長度

bool operator>(CMessage&m);      
bool CMessage::operator>(CMessage &m)
{
    bool r;
    r=strlen(msg)>strlen(m.msg);
    return r;
}      
CMessage s1("123");
CMessage s2("abcd");
if (s1>s2) //相當于s1.operator>(s2);
{
    printf("s1大于s2");
} else
{
    printf("s1小于s2");
}      

重載大于運算符>實作完善的比較功能

重載運算符,常量後置

重載運算符,常量前置

重載運算符,連續運算

一、重載大于運算符>實作完善的比較功能

 CMessage s("111");

 CMessage s2("22");

 s>s2; //已經實作的

s>"23";

 "33">s;

 "33">s>s2;

 s>s2>"1"; //錯誤的表達式

bool CMessage::operator>(char*m)
{
bool r;
r=strlen(this->msg)>strlen(m);
return r;
}
bool operator>(char *s,CMessage &m)
{
bool r=strlen(s)>strlen(m.msg);
return r;
}
bool operator>( int l,CMessage &m)
{
bool r;
r=l>strlen(m.msg);
return r;
}
//bool operator>( int l,char*s)
//{
//
//return 1;
//}
int _tmain(int argc, _TCHAR* argv[])
{
CMessage s1("123");
CMessage s2("abcd");
s1>"11";//s1.operator>("11");
"33">s1;//operator>(char*,CMessage&);
"33">s1>s2;//0>s2;operator>( int,CMessage&)
// s1>s2>"1";//int ,char*
if (s1>s2)
{
printf("s1大于s2");
} else
{
printf("s1小于s2");
}
getchar();
return 0;
}      

重載++運算符

字首形式

字尾形式

一、重載++運算符字首形式

寫一個長度的類 CLength

int i=0;

printf("%d", ++i); //先自增1,再使用i的值

printf("%d",i);

//Length.h

CLength& operator++();//++字首

//Length.cpp

CLength& CLength::operator++()
{
    ++len;
    return *this;
}      

//CLength.cpp

printf("%d\n",(++i).len);      

二、重載++運算符字尾形式

i++; //先使用i本身的質,再進行自增1

printf("%d", i++);

CLength& operator++(int);//字尾++

CLength& CLength::operator++(int)
{
    CLength t=*this;
    ++len;//無論是++len還是len++對結果都無影響,函數頭決定。
    return t;
}      
printf("%d\n",(i++).len);
printf("%d\n",i.len);