代码改变世界

操作符重载

2012-03-20 21:33  江上渔者  阅读(183)  评论(0编辑  收藏  举报
// 操作符重载.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class MyClass
{
private:
int m_iNum;
char m_szText[128];
public:
MyClass()
{
m_iNum = 0;
memset(m_szText, 0, 128);
cout<<"1";
}
MyClass(const MyClass &c)
{
m_iNum = c.m_iNum;
memset(m_szText, 0, 128);
strcpy(m_szText, c.m_szText);
cout<<"2";
}
MyClass(int iNum, char *szText)
{
m_iNum = iNum;
memset(m_szText, 0, 128);
strcpy(m_szText, szText);
cout<<"3";
}
~MyClass()
{
cout<<"4";
}

const MyClass &operator=(const MyClass &second)
{
if (this==&second)
return *this;
m_iNum = second.m_iNum;
strcpy(m_szText, second.m_szText);
cout<<"5";
return *this;
}

const MyClass operator+(const MyClass &second)
{
MyClass tmp(*this);
tmp.m_iNum += second.m_iNum;
strcat(tmp.m_szText, second.m_szText);
cout<<"6";
return tmp;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
{
MyClass c1(1, "abc");
MyClass c2(2, "def");
MyClass c3 = c1 + c2;
MyClass c4;
c4 = c1;
}
// c1.m_iNum=1;c1.m_szText="abc"
// c2.m_iNum=2;c2.m_szText="def"
// c3.m_iNum=3;c3.m_szText="abcdef"
// c4.m_iNum=1;c4.m_szText="abc"
// 屏幕输出:332624154444
// 注:MyClass c3 = c1 + c2; 等价于 MyClass c3(c1 + c2);

// 若将const MyClass operator+(const MyClass &second) 改成 const MyClass &operator+(const MyClass &second)
// 则,屏幕输出:33264215444,且c3.m_szText为乱码。若在BCB中,则提示:[BCC32 Error] File1.cpp(60): E2363 Attempting to return a reference to local variable 'tmp'

return 0;
}