优化下列代码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 12:30:42 浏览: 51
以下是对代码的优化建议:
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 来修饰。
相关问题
nclude <fcntl.h>#include <unistd.h
这两个头文件`<fcntl.h>`和`<unistd.h>`在C/C++编程中分别用于访问文件控制功能和定义一些基本的Unix/Linux系统调用。
`<fcntl.h>`包含了与文件描述符相关的函数和常量,比如`fcntl()`用于改变文件描述符的属性,或者进行文件锁定操作。
`<unistd.h>`则包含了大量与进程和用户接口有关的函数,如标准输入/输出重定向(`dup2()`),进程ID的获取(`getpid()`),进程信号处理(`kill()`),以及基本的I/O操作(如`read()`和`write()`)等。
如果你想要演示如何使用这些头文件,这里是一个简单的例子,它使用`unistd.h`中的`fork()`函数创建子进程:
```c
#include <stdio.h> // 用于printf输出
#include <unistd.h> // 包含fork()函数
int main() {
pid_t child_pid = fork(); // 创建子进程
if (child_pid == 0) { // 子进程
printf("This is a child process with PID: %d\n", getpid()); // 输出子进程PID
} else if (child_pid > 0) { // 父进程
printf("Parent process created child with PID: %d\n", child_pid); // 输出子进程PID
} else { // fork失败
perror("Fork failed");
}
return 0;
}
```
在这个例子中,`fork()`函数会创建一个新的进程(如果成功),并返回新进程的PID。父进程和子进程各自执行不同的代码路径。
i#nclude<string>无法编译
对于C++中的string库,正确的头文件应该是 `#include <string>`,而不是 `#include <string.h>`。
所以,如果您的代码中使用了 `#include <string.h>`,编译器就会报错。您需要将其改为 `#include <string>`,这应该就能够成功编译了。
请注意,C++中的string库与C语言中的string.h库是不同的。如果您在C++中使用了 C语言的string.h库,则也会导致编译错误。
阅读全文