知识点
重载赋值运算符=
一、重载运算符格式
返回类型 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);