自定义string类的两个下标函数
自定义string类的两个下标函数作者:lyb661(20190104)
例如,有类定义:
//myString.h(头文件)
class myString
{
public:
myString(const char* cstring="");
//other member function
char operator[](int k)const;
char& operator[](int k);
//other member function
protected:
private:
char* buffer;
int strLength;
};
//myString.cpp(源程序文件)
char myString::operator[](int k)const
{
if(k<0||k>=strLength)
cerr<<"outofbound";
return buffer[k];
}
char& myString::operator[](int k)
{
if(k<0||k>=strLength)
cerr<<"outofbound";
return buffer[k];
}
//other member function definition
如上所列,访问string类的下标定义了两个函数版本,一个是非const版本,另一个是const版本,非const版本返回引用类型。
为什么要定义两个版本呢?
因为C风格字符串一般为const char* 类型,如果要通过下标来访问string字符串中的单个字符,编译器将保证字符串本身不被修
改;另外非const版本将用来修改字符串中的单个字符,如果不定义为引用类型则不能修改单个字符。
至于编译器不同,编译的结果也不一样。总之两个版本各有各的用途。例如:
void f1()
{
myString str1="hello";
str1[0]='f';
}
void f2()
{
myString str2("hello world!");
std::cout<<str2[3];
}
函数f1将调用非const引用版本,而f2将调用const版本,两者在程序中各司其职,不能互相代替,可以说是缺一不可的。