C++操作符重载分为
1. 运算符重载(+、-、*、<<、->等)
2.类型重载(int、long、string、类、void*、int*等)
下面着重说一些int和void*的重载
注:开发环境为VS2010
1.int重载
class integer
{
public:
int m_a;
int m_b;
operator int(){cout<<"operator int()"<<endl;return m_b;}
};
int _tmain(int argc, _TCHAR* argv[])
{
integer integer_;
integer_.m_a=2;
integer_.m_b=5;
cout<<"1---------------------"<<endl;
int nInteger=integer_;
//int nInteger;
//nInteger=integer_;
cout<<"1---------------------"<<endl;
cout<<"(int)integer_="<<(int)integer_<<endl;
return 0;
}
输出结果为
1---------------------
operator int()
1---------------------
(int)integer_=5
2.void* 重载
(其实在VS中看一下CFont等类的实现就会发现CFont类对操作符void*的实现过程)
本人自己写的代码如下:
typedef void* hVOID;
class MYclass
{
public:
static void/*MYclass* */ printOp(hVOID hVoid);
operator hVOID();
};
MYclass::operator hVOID()
{
cout<<"MYclass::operator hVOID()"<<endl;
return "operator hVOID()";
}
void MYclass::printOp(hVOID hVoid)
{
cout<<"hVoid="<<(char*)hVoid<<endl;
//return (MYclass*)hVoid;
}
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"n2015_03_24--------------"<<endl;
MYclass myCLASS;
MYclass::printOp((hVOID)myCLASS); //不能写&myCLASS
cout<<"n2015_03_24--------------"<<endl;
return 0;
}
输出结果为
n2015_03_24--------------
MYclass::operator hVOID()
operator hVOID()
n2015_03_24--------------
需要注意的是若定义的是指针类,则应该如下
MYclass *myCLASS=new MYclass;
MYclass::printOp((hVOID)(*myCLASS)); //不能直接用myCLASS
3、实例
class OperaterTest
{
public:
OperaterTest() { cout << "OperaterTest()" << endl; }
OperaterTest& operator [] (int nPara)
{
cout << "OperaterTest& operator[]" << endl;
return *this;
}
void operator () (int nPara)
{
cout << "OperaterTest void operater()" << endl;
}
};
class ParaTest
{
private:
int m_a = 1;
public:
ParaTest () { cout << "ParaTest()" << endl; }
ParaTest(int nPara) { cout << "ParaTest(int nPara)" << endl; }
ParaTest(float fPara) { cout << "ParaTest(float fPara)" << endl; }
};
class OperaterTestEx
{
public:
OperaterTestEx() { cout << "OperaterTestEx()" << endl; }
OperaterTestEx& operator [] (ParaTest const & para)
{
cout << "OperaterTestEx& operator[]" << endl;
return *this;
}
void operator () (ParaTest *para = NULL)
{
cout << "OperaterTestEx void operater()" << endl;
}
};
main函数中:
cout << "------------3333333333-----------------" << endl;
OperaterTest()[1][2](1);
cout << "------------4444444444-----------------" << endl;
const ParaTest & para = 1;
const ParaTest & para2 = 1.0f;
cout << "------------5555555555-----------------" << endl;
OperaterTestEx()[1][2][3]();
打印结果为:
------------3333333333-----------------
OperaterTest()
OperaterTest& operator[]
OperaterTest& operator[]
OperaterTest void operater()
------------4444444444-----------------
ParaTest(int nPara)
ParaTest(float fPara)
------------5555555555-----------------
ParaTest(int nPara)
ParaTest(int nPara)
ParaTest(int nPara)
OperaterTestEx()
OperaterTestEx& operator[]
OperaterTestEx& operator[]
OperaterTestEx& operator[]
OperaterTestEx void operater()