读书人

关于运算符的重载operator char*( ),该

发布时间: 2012-02-16 21:30:36 作者: rapoo

关于运算符的重载operator char*( )
维护的程序有如下代码片段:
--------------------------------------------
class CString
{
protected:
std::string std;
public:
....
operator LPCTSTR( ) const ;
operator char*( );
operator const char*( );
operator const void*( );
....
}

CString::operator LPCTSTR( ) const
{
return (char *)std.c_str();
}

CString::operator char*( )
{
return (char *)std.c_str();
}
--------------------------------------------

1) 请问char* 这样的东西也能重载?不是说重载运算符只能对已有的运算符才能重载吗?怎么也能对LPCTSTR重载??
2) 我这样重载了,我如何在外边的程序里调用LPCSTR,char* ??? 给两个例子

[解决办法]
C++ Primer 3e 15.9 P633
[解决办法]
这个不是重载, 这是一个转换符, 当你的class与一个char*类型的运算时, 它隐式转换成一个chai*, 往往就是返回它的char*成员吧.
[解决办法]
类型转换.
[解决办法]
隐式类型转换而已

比如

class RangeInt
{
int data_;
public:
operator int(){ return data_; }
};

这个例子够浅显了吧
就是实现一种转化,在需要用到int的地方,也可以传RangeInt过去
[解决办法]
void fun(int i);

RangeInt ri;
fun(ri); //ok,这里用到了隐式转换
[解决办法]
调用如下
CString str;
//初始化str


char* pstr = char*(str);

读书人网 >C++

热点推荐