You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:35:22