变量怎么禁止重复初始化?

问题遇到的现象和发生背景

img

问题相关代码,请勿粘贴截图

#include
#include
#include
using namespace std;
static int orangenum=0, applenum=0, peachnum=0;
class fruit
{
private:
string m_Name;
string m_origin;
int m_weith;
int m_level;
public:
string Name(string name)
{
m_Name = name;
return m_Name;
}
string Origin(string origin)
{
m_origin = origin;
return m_origin;
}
int weith(int weith)
{
m_weith = weith;
return m_weith;
}
int level(int level)
{
m_level = level;
return m_level;
}
void output()
{
if (m_weith > 100 && m_level == 1 && m_Name == "orange")
{
orangenum++;
}
if (m_weith > 100 && m_level == 1 && m_Name == "apple")
{
applenum++;
}
if (m_weith > 100 && m_level == 1 && m_Name == "peach")
{
peachnum++;
}
cout << "orange: " << orangenum << " ";
cout << "apple: " << applenum << " ";
cout << "peach: " << peachnum << " ";
}
};
int main()
{
int n, i;
cin >> n;
string Name;
string origin;
int weith;
int level;
fruit A;
for (i = 0; i < n; i++)
{
cin >> Name >> origin >> weith >> level;
A.Name(Name);
A.Origin(origin);
A.weith(weith);
A.level(level);
}
A.output();
system("pause");
return 0;
}

运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果

怎么可以防止变量重复初始化

初始化就是赋值,只有常量才能一次初始化后无法更改,其它变量无法做到。
无瑕疵的leve应该时0,你都写成1了。另外,每次输入的时候,没有更新static变量的值。
你的代码修改如下:

#include <iostream>
#include <string>
using namespace std;
static int orangenum = 0, applenum = 0, peachnum = 0;
class fruit
{
private:
    string m_Name;
    string m_origin;
    int m_weith;
    int m_level;
public:
    string Name(string name)
    {
        m_Name = name;
        return m_Name;
    }
    string Origin(string origin)
    {
        m_origin = origin;
        return m_origin;
    }
    int weith(int weith)
    {
        m_weith = weith;
        return m_weith;
    }
    int level(int level)
    {
        m_level = level;
        return m_level;
    }

    void deal() 
    {
        if (m_weith >= 100 && m_level == 0 && m_Name == "orange")
        {
            orangenum++;
        }
        if (m_weith >= 100 && m_level == 0 && m_Name == "apple")
        {
            applenum++;
        }
        if (m_weith >= 100 && m_level == 0 && m_Name == "peach")
        {
            peachnum++;
        }
    }

    void output()
    {
        
        cout << "orange: " << orangenum << " ";
        cout << "apple: " << applenum << " ";
        cout << "peach: " << peachnum << " ";
    }
};
int main()
{
    int n, i;
    cin >> n;
    string Name;
    string origin;
    int weith;
    int level;
    fruit A;
    for (i = 0; i < n; i++)
    {
        cin >> Name >> origin >> weith >> level;
        A.Name(Name);
        A.Origin(origin);
        A.weith(weith);
        A.level(level);
        A.deal();
    }
    A.output();
    system("pause");
    return 0;
}

为什么要禁止重复初始化呢?
应该从源头解决你的问题

你这题目跟是否禁止初始化没有关系啊
如果想禁止重复初始化,2种思路
1.如果变量本身支持null类型,或者变量本身赋值存在一个区间,那么你设置初值为null或者一个绝对不会被赋值的数量,然后判断如果数变了就是初始化过了
2.如果变量本身不支持null而且全域可用,可以再设置一个bool值表示它是否被赋值过
以上功能都必须用属性来实现,不要简单的把字段暴露出来,那样类外部随便可以修改字段,你就不知道字段什么时候被赋值的了。

有点好笑,禁止初始化,那这个变量要来干啥

不是禁止重复初始化,是禁止别人修改变量,当成常量使用吗? const属性了解一下

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632