运算符重载,使用 char

operator overloading, using char

本文关键字:char 使用 重载 运算符      更新时间:2023-10-16

我想使用运算符重载制作库存管理程序

例如,如果出售一种纸巾,我想使用' 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;
}

作为初学者,我尽力了。我知道代码很奇怪,请告诉我我错过的任何事情

如果我理解得很好,你想要:

  • AA是对象的容器:p[0]将容纳"组织"的数量,p[1]"日历"的数量,等等......
  • 通过使用对象名称实现将减少此容器中对象数量的运算符。

关于解决当前问题:

不幸的是,您的运算符重载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; 
  }

我想你的问题只是关于学习如何使用运算符重载,而不是关于制作质量代码。 在这种情况下,这种方法很好。

更进一步:

事实上,你试图以自己的方式实现的,是一种联想容器。 幸运的是,这已经存在于标准C++中,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;