优化下列代码nclude<iostream> #include<string> using namespace std; class Item_0321wzj { public: string name_0321wzj; double price_0321wzj; Item_0321wzj(string n_0321wzj, double p_0321wzj) { name_0321wzj=n_0321wzj; price_0321wzj=p_0321wzj; } }; struct Rack_0321wzj { char product_0321wzj[20]; int itemsnum_0321wzj; float itemsprice_0321wzj; float totalprice_0321wzj_0321; }; class Cart_0321wzj { public: Item_0321wzj* items_0321wzj[100]; int nitems_0321wzj; Cert_0321wzj() { nitems_0321wzj=0; } void additem_0321wzj(Item_0321wzj*item_0321wzj) { items_0321wzj[nitems_0321wzj]=item_0321wzj; nitems_0321wzj++; } double get_total_0321wzj() { double total_0321wzj=0; for(int i=0;i<nitems_0321wzj;i++) { total_0321wzj+=items_0321wzj[i]->price_0321wzj; } return total_0321wzj; } }; class Market_0321wzj { public: Item_0321wzj*items_0321wzj[100]; int nitems_0321wzj=0; Market_0321wzj() { nitems_0321wzj=0; } void additem_0321wzj(Item_0321wzj*item_0321wzj) { items_0321wzj[nitems_0321wzj]=item_0321wzj; nitems_0321wzj++; } void displayitems_0321wzj() { for(int i=0;i<nitems_0321wzj;i++) { cout<<items_0321wzj[i]->name_0321wzj<<"-"<<items_0321wzj[i]->price_0321wzj<<endl; } } }; class Category_0321wzj { public: void setCategory_0321wzj(string category_0321wzj) { this->category_0321wzj=category_0321wzj; } string getCategory_0321wzj() { return category_0321wzj; } private: string category_0321wzj; }; class Product_0321wzj { public: string name_0321wzj; void setName_0321wzj(string name_0321wzj) { this->name_0321wzj=name_0321wzj; } string getName_0321wzj() { return name_0321wzj; } private: string name; }; int main() { Rack_0321wzj s1_0321wzj,s2_0321wzj; s1_0321wzj.itemsnum_0321wzj = 5; s1_0321wzj.itemsprice_0321wzj=15; s1_0321wzj.totalprice_0321wzj_0321=s1_0321wzj.itemsnum_0321wzj*s1_0321wzj.itemsprice_0321wzj; Category_0321wzj fruit_0321wzj; fruit_0321wzj.setCategory_0321wzj("fruit"); fruit_0321wzj.setCategory_0321wzj("stationery"); Product_0321wzj apple_0321wzj; apple_0321wzj.setName_0321wzj("apple"); apple_0321wzj.setName_0321wzj("pen"); Market_0321wzj market_0321wzj; market_0321wzj.additem_0321wzj(new Item_0321wzj("apple",1.0)); market_0321wzj.additem_0321wzj(new Item_0321wzj("pen",3.5)); market_0321wzj.displayitems_0321wzj(); Cart_0321wzj cart_0321wzj; cart_0321wzj.additem_0321wzj(market_0321wzj.items_0321wzj[0]); cart_0321wzj.additem_0321wzj(market_0321wzj.items_0321wzj[1]); return 0; }
时间: 2024-04-03 18:30:42 浏览: 20
以下是对代码的优化建议:
1. 命名规范问题:
- 建议使用有意义的变量、函数和类名,以提高代码的可读性。
- 类名、函数名和变量名应该使用有意义的单词或短语,且第一个单词首字母应该大写。
- 变量名应该使用驼峰式命名法,即首字母小写,后面每个单词的首字母大写。
2. 类的设计问题:
- Rack_0321wzj 结构体中的成员变量可以使用类来代替,这样代码更易于扩展和维护。
- Cart_0321wzj 类的构造函数名拼写错误,应该改为 Cart_0321wzj。
- Market_0321wzj 类中的 nitems_0321wzj 变量可以在类的构造函数中初始化,而不是在类的定义中初始化。
- Category_0321wzj 类中的 setCategory_0321wzj 函数设置了两次,第二次的值会覆盖第一次的值,应该删除其中一次。
- Product_0321wzj 类中的 setName_0321wzj 函数设置了两次,第二次的值会覆盖第一次的值,应该删除其中一次。
3. 其他问题:
- 建议使用动态内存分配来存储 item_0321wzj,而不是使用固定大小的数组,以便在添加更多商品时不会出现数组越界的问题。
- 建议使用 const 来修饰不会修改的变量,以提高代码的可读性和安全性。例如,get_total_0321wzj 函数中的变量 total_0321wzj 可以使用 const 来修饰。
相关问题
i#nclude<string>无法编译
对于C++中的string库,正确的头文件应该是 `#include <string>`,而不是 `#include <string.h>`。
所以,如果您的代码中使用了 `#include <string.h>`,编译器就会报错。您需要将其改为 `#include <string>`,这应该就能够成功编译了。
请注意,C++中的string库与C语言中的string.h库是不同的。如果您在C++中使用了 C语言的string.h库,则也会导致编译错误。
分析代码#include<unistd.h>#ncLude<sys/stat.h>#includefcntl.h>#includexstdlib.h>int main()#char C;int in;int i;in=open("file.in",0 WRONLY/O CREAT);for(i=l;i<10240;i++)#c=i%26+65 write(in,&c,l);S exit(0)
这段代码包含了以下头文件:
```
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
```
然后定义了一个`main`函数,返回类型为`int`。在函数中定义了以下变量:
```
char C;
int in;
int i;
```
接着打开了一个名为`file.in`的文件,并且以只写和创建方式打开,使用`open`函数:
```
in = open("file.in", O_WRONLY | O_CREAT);
```
接下来进入一个循环,从`0`开始,循环到`10239`。在循环中对变量`c`进行赋值,使用`i`对`26`取余数再加上`65`,也就是将`c`赋值为`A`到`Z`的字符。然后将`c`写入到文件中,使用`write`函数:
```
for (i = 0; i < 10240; i++) {
c = i % 26 + 65;
write(in, &c, 1);
}
```
最后使用`exit`函数退出程序,传入`0`作为参数:
```
exit(0);
```
这段代码的作用是往一个名为`file.in`的文件中写入`A`到`Z`的字符,每个字符写入一个字节。写入的字符数量为`10240`个。