#include <iostream> using namespace std; class Goods { public: Goods() //货物的无参构造 { weight = 0; next = NULL; cout << "创建了一个重量为" << weight << "的货物" << endl; } Goods(int w) //传进一个重量为w的货物,且仓库的总重量加上w { weight = w; next = NULL; //每创建一个货物,其指针域要为空,否则会出现乱码 a_weight += w; cout << "创建了一个重量为" << weight << "的货物" << endl; } ~Goods() //仓库减少这个重量的货物 { cout << "删除了一箱重量为" << weight << "的货物" << endl; a_weight -= weight; } Goods *next; //定义每个类的指针域,用于链表的连接 static int sum() //定义静态统计函数,用于返回私有的静态成员变量 { return a_weight; } private: int weight; static int a_weight; //统计仓库的总重量 }; int Goods::a_weight = 0; //静态成员的初始化 void buy(Goods *&head, int w) //定义进货函数,形参为引用,或者二级指针,目的是为了能够通过函数修改主函数名为head的链表 { Goods *new_goods = new Goods(w); if (head == NULL) { head = new_goods; } else { new_goods->next = head; //在表头插入,此步骤意为新传入的w的next指向头指针head所指向的地址,即原链表的第一个元素 head = new_goods; //修改表头指针使表头指针指向新添加的w的地址空间 } } void sale(Goods *&head) //定义出货函数,形参为引用,目的是为了能够通过函数修改主函数名为head的链表 { if (head == NULL) { cout << "仓库已经没有货物了" << endl; } else { Goods *temp = head; //建立一个临时temp,使其指向Head指向的第一个元素的地址 head = head->next; //修改头指针,使其指向第二个元素 delete temp; cout << "saled..." << endl; } } int main() { int choice; int w; //定义需要进货的货物的重量的变量w Goods *head = NULL; do { cout << "------------------------" << endl; cout << " 1.进货 " << endl; cout << " 2.出货 " << endl; cout << " 0.退出 " << endl; cout << "------------------------" << endl; cin >> choice; switch (choice) { case 1: //进货 cout << "请输入需要进货的货物的重量" << endl; cin >> w; buy(head, w); //传进链表和重量w break; case 2: //出货 sale(head); //传进链表 break; case 0: return 0; default: break; } cout << "当前仓库的总重量为" << Goods::sum() << endl; } while (1); system("pause"); return 0; }
原文链接: https://www.cnblogs.com/god-for-speed/p/10925862.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/295635
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!