#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass()
{
cout<<"MyClass()"<<endl;
buffer=NULL;
num=0;
}
MyClass(MyClass &object)
{
cout<<"MyClass(MyClass &object)"<<endl;
buffer=NULL;
num=0;
*this = object;
}
MyClass &operator=(MyClass &object)
{
cout<<"MyClass &operator=(MyClass &object)"<<endl;
if(object.buffer != NULL)
{
cout<<"............."<<endl;
int len = strlen(object.buffer);
char *p = new char[len+1];
strcpy(p,object.buffer);
if(buffer != NULL)
{
delete []buffer;
}
buffer = p;
}
this->num = object.getNum();
return *this;
}
int operator+(int iNum)
{
return num+iNum;
}
#if 0
MyClass *operator+(MyClass &object)
{
cout<<"MyClass &operator+(MyClass &object)"<<endl;
MyClass *tt = new MyClass();
tt->num = num+object.getNum();
return tt;
}
#else
MyClass &operator+(MyClass &object)
{
cout<<"MyClass &operator+(MyClass &object)"<<endl;
num+=object.getNum();
return *this;
}
#endif
void operator ++()
{
num++;
}
void setNum(int num)
{
this->num = num;
}
int getNum()
{
return num;
}
void setBuffer(char *buffer)
{
this->buffer = new char[strlen(buffer)+1];
strcpy(this->buffer,buffer);
}
char *getBuffer()
{
return buffer;
}
~MyClass()
{
if(buffer != NULL)
delete []buffer;
}
private:
char *buffer;
int num;
};
void main()
{
MyClass a,b;
a.setBuffer("aaaaaaaaaaaa");
b.setBuffer("bbbbbbbbbbbb");
a=b;
cout<<a.getBuffer()<<endl;
MyClass c(a);
cout<<c.getBuffer()<<endl;
c.setNum(12);
int num = c+20;
cout<<"operator + :"<<num<<endl;
b.setNum(10);
#if 0
cout<<"-------------------"<<endl;
MyClass *p = c+b;
cout<<"operator + :"<<p->getNum()<<endl;
#else
cout<<"-------------------"<<endl;
MyClass p = c+b;
cout<<"operator + :"<<p.getNum()<<endl;
#endif;
c++;
cout<<"operator ++ :"<<c.getNum()<<endl;
++c;
cout<<"operator ++ :"<<c.getNum()<<endl;
}