如何将Book类对象添加到Cart类的Product数组中?
问题描述
我有一组继承自Product基类的Book类对象,定义如下:
Book books[5] = { Book("Kucuk Prens","FR","Roman","Book",10,15,103061,12,"Kultur yayinlari",10), Book("Kucuk Prens1","FR","Roman","Book",10,15,103061,12,"Kultur yayinlari",10), Book("Kucuk Prens2","FR","Roman","Book",10,15,103061,12,"Kultur yayinlari",10), Book("Kucuk Prens3","FR","Roman","Book",10,15,103061,12,"Kultur yayinlari",10), Book("Kucuk Prens4","FR","Roman","Book",10,15,103061,12,"Kultur yayinlari",10)};
另外我定义了Cart类,代码如下:
class Cart { private: int totalPrice; Product productList[5]; // 用户选择的商品 public: };
我希望将books[1]添加到productList数组中,请问该如何实现?
实现方案
你的Cart类目前没有对外操作内部数组的接口,而且直接存Product对象会有对象切片问题(Book特有的成员会丢失),下面分两种情况给出实现:
1. 基础实现(需注意切片问题)
先给Cart添加添加商品的方法,同时记录数组已使用的位置:
// 先假设你已经定义了Product和Book基类/子类 class Product { // 这里需要包含Product的成员,比如价格等,以及对应的get方法 public: int getPrice() const { /* 返回商品价格 */ } }; class Book : public Product { // Book特有的成员,比如出版社、页数等 }; class Cart { private: int totalPrice; Product productList[5]; int itemCount = 0; // 记录当前已添加的商品数量 public: // 添加商品的方法 bool addProduct(const Product& product) { if (itemCount < 5) { // 检查购物车是否已满 productList[itemCount] = product; itemCount++; // 同步更新总价,需要Product有获取价格的方法 totalPrice += product.getPrice(); return true; } printf("购物车已满,无法添加更多商品\n"); return false; } };
调用方式:
int main() { Book books[5] = { /* 你的初始化代码 */ }; Cart myCart; myCart.addProduct(books[1]); // 将books[1]添加到购物车 return 0; }
⚠️ 注意:这种方式会发生对象切片——productList是Product类型数组,存入Book对象时,只会保留基类Product的部分数据,Book特有的成员会丢失。如果需要完整保留Book信息,建议用下面的优化方案。
2. 优化方案(避免对象切片)
改用Product*指针数组存储,这样可以保留子类对象的完整信息:
class Cart { private: int totalPrice; Product* productList[5]; // 存储商品指针 int itemCount = 0; public: bool addProduct(Product* product) { if (itemCount < 5) { productList[itemCount] = product; itemCount++; totalPrice += product->getPrice(); return true; } printf("购物车已满\n"); return false; } // 如果商品是动态分配的,需要在析构函数中释放内存,避免泄漏 ~Cart() { // for (int i = 0; i < itemCount; i++) { // delete productList[i]; // } } };
调用方式:
int main() { Book books[5] = { /* 你的初始化代码 */ }; Cart myCart; myCart.addProduct(&books[1]); // 传入books[1]的地址 return 0; }
内容的提问来源于stack exchange,提问作者Mablungware
相关产品推荐
相关产品推荐

