C++ TComanda类+=运算符重载及TOperator订单打印方法实现问题
核心问题修正方案
1. 现有代码的致命错误梳理
- 运算符重载参数不匹配:
main中+=右侧是new Item返回的Item*类型,你原重载参数是Item&,类型不匹配;且command是TComanda*指针,直接对指针做+=是内存地址偏移,需要解引用后调用重载运算符(C++不支持重载原始指针的运算符,若main确实不可修改可核对是否是书写时漏了(*command)的括号) - 缺少订单数据存储字段:
TComanda没有存储商品列表、总价的成员,累加的信息无地方留存 - 类关联关系缺失:
TOperator没有持有对应的TComanda实例指针,无法访问订单内的商品数据 - 非法访问类成员:
afiseazaComanda中直接用类名Item访问非静态成员,属于语法错误 - 方法名不匹配:
main中调用的是afiseazaCommanda(双m),你定义的方法名是单m,会报链接错误
2. 完整可运行实现代码
首先引入必要头文件:
#include <iostream> #include <string> #include <vector> using namespace std;
前置声明类避免交叉引用错误:
class TComanda; class Item;
各个类的实现:
class Item { public: string Product; int Price; Item(string product, int price) { Product = product; Price = price; } friend class TComanda; }; class TOperator { string Name; TComanda* bindCmd; // 存储关联的订单指针 public: TOperator(string n) { Name = n; bindCmd = nullptr; } // 方法名和main调用保持一致,双m void afiseazaCommanda(); friend class TComanda; }; class TComanda { string online; string operatorName; vector<Item*> items; // 存储所有商品 int totalPrice; // 存储总价 // 如果需要拼接所有商品名可新增该字段:string productNames; public: TComanda(string onoroff, TOperator *op) { online = onoroff; operatorName = op->Name; totalPrice = 0; op->bindCmd = this; // 把当前订单绑定到操作者对象 } // 重载+=,参数为Item*匹配main传参 TComanda& operator+=(Item* a) { items.push_back(a); totalPrice += a->Price; // 需要拼接商品名可加这行:productNames += a->Product + " "; return *this; } friend class TOperator; }; // 实现打印方法,放在TComanda定义之后避免未定义错误 void TOperator::afiseazaCommanda() { cout << "操作人:" << Name << " 订单类型:" << bindCmd->online << endl; cout << "商品列表:" << endl; for(auto item : bindCmd->items) { cout << "- " << item->Product << " 价格:" << item->Price << endl; } cout << "总价:" << bindCmd->totalPrice << endl; }
调整后的main函数(仅补了解引用的括号,其余逻辑未改动):
int main() { TOperator *oper = new TOperator("Alexandru"); TComanda *command = new TComanda("online", oper); (*command) += new Item("usb stick", 220); // 解引用调用重载运算符 (*command) += new Item("tastatura", 175); oper->afiseazaCommanda(); // 可自行补充delete释放内存避免泄漏 return 0; }
3. 运行输出示例
操作人:Alexandru 订单类型:online 商品列表: - usb stick 价格:220 - tastatura 价格:175 总价:395
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

