看不懂书上的例子(下标运算符重载)

来源:百度知道 编辑:UC知道 时间:2024/05/14 09:41:06
代码是:
#include <iostream.h>

class CharArray
{
public:
CharArray(int l)
{
Length = l;
Buff = new char[Length];
}
~CharArray() { delete Buff; }
int GetLength() { return Length; }
char & operator [](int i);
private:
int Length;
char * Buff;
};

char & CharArray::operator [](int i)
{
static char ch = 0;
if(i<Length&&i>=0)
return Buff[i];
else
{
cout<<"\nIndex out of range.";
return ch;
}
}

void main()
{
int cnt;
CharArray string1(6);
char * string2 = "string";
for(cnt=0; cnt<8; cnt++)
string1[cnt] = string2[cnt];
cout<<"\n";
for(cnt=0; cnt<8; cnt++)
cout<<string1[cnt];
cout<<"\n";
cout<<string1.GetLength()<<endl;
}

运行后的结果是

CharArray string1(6); // 调用构造函数CharArray(int l) ,初始化
char * string2 = "string";
for(cnt=0; cnt<8; cnt++)
string1[cnt] = string2[cnt]; // 每次赋值都调用一次下标操作,当cnt>=6时,输出"\nIndex out of range.",供输出两次
cout<<"\n";
for(cnt=0; cnt<8; cnt++)
cout<<string1[cnt]; // 逐个输出sting,当cnt>=6时输出"\nIndex out of range.",供输出两次
cout<<"\n";
cout<<string1.GetLength()<<endl;// 调用GetLength()函数,返回6