C++ 操作符重载之 类型转换 重载

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()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值