操作符重载

需要注意的是操作符重载,赋值操作符必须返回*this;

输入输出操作符不能作为类的成员函数,一般应声明为friend;

关系操作符应定义为内联函数,也应为非成员函数;

#include "stdafx.h"
#include <iostream>
using namespace std;
class myClass
{
public:
myClass(int ,int ,char*);
~myClass();
void printMem();
int get_len();
myClass &operator+(const myClass&);
friend ostream&operator<< (ostream&os,const myClass&);
private:
int m_a;
int m_b;
char *m_str;
int m_len;
};
myClass::myClass(int a,int b,char *str):m_a(a),m_b(b)
{
if(str == NULL)
{
m_str = new char[1];
*m_str = '\0';
m_len = 0;
}
else
{
int len = strlen(str)+1;
m_str = new char[len];
strcpy(m_str,str);
m_len = len -1;
}


}
void myClass::printMem()
{
cout<<m_a<<"\t"<<m_b<<"\t"<<m_len<<"\t"<<m_str<<endl;
}
myClass::~myClass()
{
delete(m_str);
m_str = NULL;
}
ostream&operator<<(ostream&os,const myClass&obj)
{

os<<obj.m_a<<"\t"<<obj.m_b<<"\t"<<obj.m_len<<"\t"<<obj.m_str<<endl;
return os;
}
int myClass::get_len()
{
return m_len;
}
myClass&myClass::operator+(const myClass&obj)
{
m_a +=obj.m_a;
m_b+=obj.m_b;
m_len +=obj.m_len;
strcat(m_str,obj.m_str);
return *this;
}
int _tmain(int argc, _TCHAR* argv[])
{
myClass object(1,2,"hello");
cout<<object;
myClass object1(1,2,"world");
object =object+ object1;
cout<<object;

return 0;
}

 

posted on 2012-06-14 23:38  kunkka_  阅读(123)  评论(0编辑  收藏  举报