知识点

重载赋值运算符=

一、重载运算符格式

  返回类型    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个对象字串的长度


//头文件 Message.h  

bool operator>(CMessage&m);

//源文件 Message.cpp


bool CMessage::operator>(CMessage &m)
{
    bool r;
    r=strlen(msg)>strlen(m.msg);
    return r;
}


//主文件 MessageC++.cpp

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++);

printf("%d",i);

//Length.h

CLength& operator++(int);//后缀++

//Length.cpp

CLength& CLength::operator++(int)
{
    CLength t=*this;
    ++len;//无论是++len还是len++对结果都无影响,函数头决定。
    return t;
}

//CLength.cpp

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