知識點
重載指派運算符=
一、重載運算符格式
傳回類型 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);