看个例子:
#include "stdafx.h"
#include <iostream>
using namespace std;
class CTest
{
public:
CTest(char * pMsg)
{
m_pMsg = new char[strlen(pMsg)+1];
memset(m_pMsg, 0, strlen(pMsg)+1);
memcpy(m_pMsg, pMsg, strlen(pMsg));
}
operator char * ()//把该类型隐式转换为char *
{
return m_pMsg;
}
~CTest()
{
if (m_pMsg != NULL)
{
delete [] m_pMsg;
m_pMsg = NULL;
}
}
private:
char * m_pMsg;
};
bool intCom(int nData)
{
return (nData > 5);
}
int _tmain()
{
CTest test("what a fucking day");
char * pMsg = test; // 注意这句
system("pause");
return 0;
}
重点分析CTest中的operator char * ()。重载了内置类型char *,该函数为什么没有返回值?因为返回值就是char *,和要重载的类型一样,故省略,这里所重载也许不正确。如果把Ctest的operator char * ()定义去掉,该程序无法编译。
如果不能理解,就请先死记它,随着知识的增长,总会明白的。