#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;
}
怎么可以防止变量重复初始化
初始化就是赋值,只有常量才能一次初始化后无法更改,其它变量无法做到。
无瑕疵的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属性了解一下
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!