我想使用运算符重载来制作库存管理程序
例如,如果出售一种纸巾,我想使用'tissue- = 1'进行操作我为产品库存制作了一个数组P = {1,2,3,4,5},用于组织,日历,扇子,书,笔
我的部分代码(用于测试)是:
#include<iostream>
#include<string>
using namespace std;
class A{
public:
static int p[];
int operator-(string &a){
if (strcmp(a, "tissue")==0)
return p[0]-=1;
else
cout<<"error"<<endl;
}
};
int A::p[]={1,2,3,4,5}
int main(){
A AA;
"tissue"-=1;
return 0;
}
我尽力做初学者..我知道代码非常奇怪,请告诉我任何我错过的信息
答案 0 :(得分:3)
如果我理解得很好,你想要:
p[0]
将包含&#34; tissue&#34;,p[1]
数量&#34; calendar&#34;等... 不幸的是,您的运算符重载int operator-(string &a)
可能会从A
中减去字符串值并返回int
。
所以在main()
你应该写:
AA - "tissue";
对operator-
产生副作用的事实非常奇怪。当你写x-1时,你不希望x被改变,是吗?因此,我建议使用预期会产生副作用的运算符来提高代码的可读性。
顺便说一下,我也使用像C ++字符串这样的字符串,而不是像c字符串那样。
A& operator-= (string &a) {
if (a == "tissue")
p[0]-=1; // p[0]-- would be an alternative as well ;-)
else if (a=="calendar")
p[1]-=1;
//etc...
else
cout<<"error"<<endl;
return *this;
}
我认为你的问题只是学习如何使用操作员过载,而不是用于生产质量代码。在这种情况下,这种方法很好。
实际上,您尝试以自己的方式实现的是一种关联容器。幸运的是,这已经存在于带有 std::map
您的所有代码都可以替换为:
map<string, int> AA;
AA["tissue"]++;
AA["calendar"]+=10;
AA["fan"] = AA["calendar"]*2;
cout << "I have "<<AA["tissue"] <<" tissues in stock"<<endl;