为什么ar[2]的初始值是32
#include<iostream>#include<string.h>
using namespace std;
class cls
{
int ar;
public:
int& operator[] (int i); //重载"[]"操作符,"[]"内的操作数的操作数是int类型
int& operator[] (const char* str);//重载"[]"操作符,"[]"内的操作数是字符串类型
int print(int i){
return ar;
}
};
int& cls::operator[] (const char* str)
{
//1st 2nd 3rd 4th 5th
if (!strcmp("1st", str))
//printf("%d %d",1,ar);
return ar;
if (!strcmp("2nd", str))
return ar;
if (!strcmp("3rd", str))
return ar;
if (!strcmp("4th", str))
return ar;
if (!strcmp("5th", str))
return ar;
if (!strcmp("6th", str))
return ar;
}
int main(void){
cls c;
int i=0;
for(i=0;i<6;i++){
printf("%d %d\n",i,c.print(i));
}
printf("c[\"1st\"] = %d\n", c["1st"]);
//c["2nd"] = 66;
printf("c[\"2nd\"] = %d\n", c["2nd"]);
printf("c[\"3rd\"] = %d\n", c["3rd"]);
printf("c[\"4rd\"] = %d\n", c["4th"]);
printf("c[\"5rd\"] = %d\n", c["5th"]);
printf("c[\"6rd\"] = %d\n", c["6th"]);
return 0;
} ar的初始值是32是因为在类cls中定义了一个int类型的私有变量ar,但没有为其赋初始值,所以默认初始化为0。
在main函数中,通过cls类的实例c,我们可以调用operator函数来操作ar这个变量。在operator函数中,根据输入的字符串参数(str),决定返回ar的引用。
在你的代码中,无论输入的是什么字符串,都会返回ar的引用,而不做任何其他操作。所以最后输出的结果就是ar的值,即32。
如果你想根据输入的字符串参数来决定返回不同的结果,可以在operator函数中添加逻辑判断和操作。例如:
int& cls::operator (const char* str)
{
if (!strcmp("1st", str))
return ar;
if (!strcmp("2nd", str))
return ar + 1;
if (!strcmp("3rd", str))
return ar * 2;
// 其他情况...
}
这样就可以根据输入的字符串返回不同的结果了。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]