c++,程序如下,for (i=0;i<11;i++) { cout<<ca[i];//为什么当i=9和10时不输出B、C ca[i]=array[i]; }

#include <IOSTREAM>
using namespace std;
class chararray
{
private:
char *name;
int length;
public:
chararray(int len=0)
{
length=len;
name=new char[length];
}
char & operator[](int l)
{
static char ch=65;
if (length>l&&l>=0)
{
return name[l];
}
else
{
cout<<"\nthis number is out of range!";
return ++ch;
}
}
char f()
{
static char a=65;
return ++a;
}
};

void main()
{
chararray ca(9);
int i;
char *array="libinrong";
for (i=0;i<11;i++)
{
cout<<ca[i];
ca[i]=array[i];
}
for (i=0;i<11;i++)
{
cout<<ca[i];
}
cout<<endl;
cout<<ca.f();//为什么这三句会输出B,C,D
cout<<ca.f();
cout<<ca.f();
}

//为什么这三句会输出B,C,D——因为函数f中的a为静态变量(静态变量只在编译时初始化,以后函数每次执行执行,该变量都使用上一次结束时所赋的值)。追问

你说的我知道,但前面那个问题请解释

追答

哦,那是因为
ca[9],ca[10]被赋以array[9]和array[10]的值了,而array[9]的值为0,array[10]的值不确定。
删除语句
ca[i]=array[i];

再看看运行结果就清楚了。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答