强制类型转换运算符重载函数的返回值
《More Effective C++》上的一个例子:
#include<iostream>
#include<string>
using namespace std;
class String
{
public:
class CharProxy //代理类
{
public:
CharProxy(String& str,int index):string(str),CharIndex(index)
{}
operator char() const
{
cout<<string.data[CharIndex]<<endl; //prints 'r'
return string.data[CharIndex];
}
private:
String& string;
int CharIndex;
};
friend class CharProxy;
String(const char *value="")
{
data=new char[strlen(value)+1];
strcpy(data,value);
}
String(const String& rhs)
{
data=new char[strlen(rhs.data)+1];
strcpy(data,rhs.data);
}
CharProxy operator[] (int index) //重载运算符[]
{
return CharProxy(*this,index);
}
private:
char *data;
};
int main()
{
String s1("More");
cout<<s1[2]<<endl; //打印‘r’的ASCII值114而不是‘r’,为什么?
return 0;
};
s1[2]返回CharProxy类型,当与《运算符结合时,应该隐式转换为char型,
调用operator char() const函数,为何打印返回char型值的时候变成char型对应的ASCII值??
谢谢~~