两个成员函数如果只是常量性不同,可以被重载,这实在是一个重要的C++特性。
class TextBlock{
public:
const char& operator[] (std::size_t position ) const
{return text[position];}
char & operator[] (std::size_t position)
{return text[position];}
private:
std:string text;
};
TextBlock的operator[]s可被这么使用:
TextBlock tb("Hello");
std::cout<<tb[0]; //调用non-const TextBlock::operators
const TextBlock ctb["World"];
std::cout<<ctb[0]; //调用const TextBlock::operator[]
例如:
void print(const TextBlock & ctb)
{
std::cout<<ctb[0];
}
std::cout<<tb[0];
tb[0]='x'; //正确,写一个non-const TextBlock.
std::cout<<ctb[0];
ctb[0]='x'; //错误 写一个const TextBlock.