1215787625 发表于 2024-3-9 20:04:57

为什么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;
}

FishC 发表于 2024-3-9 20:05:15

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]
查看完整版本: 为什么ar[2]的初始值是32